{
 "generator": "mcpwatchman",
 "composite_published": false,
 "composite_note": "No composite score is published. The five axes are weighted 30/20/20/15/15 and the weighted score is computed, but it stays withheld until a hand-audited gold set validates those weights.",
 "ref_note": "`ref_matched_version` has three values, not two. true: the tree scanned is the ref the registry entry names. false: no such tag resolved and the default branch was read instead, so the findings describe branch-tip code rather than the named release. null: nothing established it — the source was never fetched, or it came from a package registry where the version is pinned in the URL. null is not false. `repository_commit` is the full commit of the repository tree the report read — the source itself when it is a repository, or, when the package's code is only build output, the declared repository Code Safety fell back to (scored there, or found to hold no covered source either; the axis reason says which). null: no commit was recorded — no repository was read, or the report predates the field. A tag can be moved and a branch tip always is; the commit is what names the tree afterwards.",
 "fault_note": "On an axis with `score: null`, `fault` says whose gap it is. `publisher` — a property of what the server published: an unreachable repository, no lockfile, no source in a language the ruleset covers. `project` — a limit of mcpwatchman itself, stated in our own voice: the Maintenance axis queries the GitHub API and does not query other forges, its popularity sub-check needs a registry-wide distribution that is not computed, and a package that ships its code only as build output (`dist/`, `build/`) with no readable repository declared — build output is not read as the server's own source, because a bundle can inline its dependencies' code — a walk of a very large tree, or of its build output, that stopped at our bound before it finished, so what the unread part holds is not claimed either way, and the methodology defines no band for a vulnerability with no CVSS. Those are the only two values you will see here: a gap caused by our own run — a scanner binary missing, a clone that timed out — is refused at publication rather than printed as the reason a server went unscored, so it never reaches this API.",
 "cohort_note": "The set of servers here is pinned and append-only: a server that has a page keeps it, its URL does not change, and the set only grows. It is not a random sample of the registry — the servers published first were drawn from the registry's alphabetical head — so do not read it as representative, and never read a server's absence as a judgement. It means we have not published that server.",
 "registry_state_note": "`registry_state` says what the registry held for this server when the report was published, and it has more than two values. \"listed\": active in the registry, and `registry_note` is empty. The registry's own word for a non-active entry, currently \"deprecated\": the entry is still there, so the server was scanned normally and the label is the publisher's, scored by nothing. \"delisted\": no current entry at all, so the page keeps the last scan taken while the server was listed. \"stale\": still listed, but the most recent run could not measure it, so the page keeps its last successful scan. Every value other than \"listed\" explains itself in `registry_note`; that invariant is the one to code against, because the registry may introduce a status we relay verbatim.",
 "unmeasured_faults_note": "On an axis that DOES carry a score, `unmeasured_faults` lists whose gap the unmeasured remainder is — the sub-checks that could not be evaluated and were renormalised out before the score was computed. Where present it is empty only when the axis was measured in full, and otherwise names the gap even when that gap is ordinary: `publisher` for a repository we could not read is the common case, not an exception. It never contains a gap caused by our own run — a partly-measured axis whose missing part is our fault is refused at publication exactly as a wholly unmeasured one is, so a scored axis here is never hiding a broken scanner. Read it together with `assessed_weight`, which says how much of the axis the score covers.",
 "evidence_omitted_note": "`evidence` on a findings-scored axis is capped at 50, most severe first — and on Code Safety, findings that deduct come before findings in test code, which are listed with `deducts: false` and never scored, so a test-code finding can be omitted while a lower-severity deducting one is shown. `evidence_omitted` is how many further findings that axis produced and this response does not list; 0 means the list is complete. ⚠ The score was computed over ALL of them: `03`'s stacking ladder diminishes to a tenth of a finding's weight and never to zero, so the omitted findings are missing from the trail, not from the arithmetic. Do not reconstruct an axis score from `evidence` alone and do not read a capped list as the full finding set — one published server carries 4,155 vulnerable dependencies.",
 "first_seen_note": "A finding — an `evidence` item whose `finding` is set (a rule id, or `package:OSV-id`) — carries `severity` and `first_seen`. `first_seen` is the date it first appeared on a page that was already being tracked (the page's `findings_tracked_since`). null means it was there when tracking began — the page's baseline — NOT that it is old, recent or unknown in any other sense; a missing key means the report predates the field. A finding stays the same finding while its axis, rule or vulnerability, and file are, so a moved line keeps its date. `/feed/high-severity.xml` carries the dated critical and high findings.",
 "coverage_note": "`assessed_weight` is the share of an axis that could actually be measured. A score of 80 at an assessed_weight of 0.25 is 80 of a quarter of the axis, and must not be rendered as 80.",
 "count": 492,
 "servers": [
  {
   "name": "ai.1325/mcp",
   "version": "0.1.3",
   "slug": "ai-1325-mcp",
   "scanned_at": "2026-10-16T02:12:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/1325ai/1325ai",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agoclnqfyinwjxdmjnns.supabase.co/functions/v1/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/1325ai/1325ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.adeu/adeu",
   "version": "1.7.1",
   "slug": "ai-adeu-adeu",
   "scanned_at": "2026-10-16T02:12:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dealfluence/adeu",
   "package": "npm:@adeu/mcp-server@1.7.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 10,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 46,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/desktop-auth.ts",
       "line": 20,
       "excerpt": "\nfunction openBrowser(url: string) {\n  if (platform() === \"darwin\") exec(`open \"${url}\"`);\n  else if (platform() === \"win32\") exec(`start \"\" \"${url}\"`);\n  else exec(`xdg-open \"${url}\"`);",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/desktop-auth.ts",
       "line": 20,
       "excerpt": "\nfunction openBrowser(url: string) {\n  if (platform() === \"darwin\") exec(`open \"${url}\"`);\n  else if (platform() === \"win32\") exec(`start \"\" \"${url}\"`);\n  else exec(`xdg-open \"${url}\"`);",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/desktop-auth.ts",
       "line": 21,
       "excerpt": "function openBrowser(url: string) {\n  if (platform() === \"darwin\") exec(`open \"${url}\"`);\n  else if (platform() === \"win32\") exec(`start \"\" \"${url}\"`);\n  else exec(`xdg-open \"${url}\"`);\n}",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/desktop-auth.ts",
       "line": 21,
       "excerpt": "function openBrowser(url: string) {\n  if (platform() === \"darwin\") exec(`open \"${url}\"`);\n  else if (platform() === \"win32\") exec(`start \"\" \"${url}\"`);\n  else exec(`xdg-open \"${url}\"`);\n}",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/desktop-auth.ts",
       "line": 22,
       "excerpt": "  if (platform() === \"darwin\") exec(`open \"${url}\"`);\n  else if (platform() === \"win32\") exec(`start \"\" \"${url}\"`);\n  else exec(`xdg-open \"${url}\"`);\n}\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/desktop-auth.ts",
       "line": 22,
       "excerpt": "  if (platform() === \"darwin\") exec(`open \"${url}\"`);\n  else if (platform() === \"win32\") exec(`start \"\" \"${url}\"`);\n  else exec(`xdg-open \"${url}\"`);\n}\n",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at src/mcp.cloud.test.ts:99",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "9 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 17 issue(s) in the last 6 months: 0.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 11 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.adoraads/beauty",
   "version": "1.0.1",
   "slug": "ai-adoraads-beauty",
   "scanned_at": "2026-10-16T02:13:02+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/DIGIBIZ360-COM/adoraads",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.adoraads.ai/beauty; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/DIGIBIZ360-COM/adoraads) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.agentdm/agentdm",
   "version": "2.0.0",
   "slug": "ai-agentdm-agentdm",
   "scanned_at": "2026-10-16T02:13:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/agentdmai/agentdm",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) Authorization that are not required on every declared endpoint — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://api.agentdm.ai/mcp/v1/grid",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.agentdm.ai/mcp/v1/grid; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/agentdmai/agentdm) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.agenticaffiliate/affiliate-networks-mcp",
   "version": "0.19.0",
   "slug": "ai-agenticaffiliate-affiliate-networks-mcp",
   "scanned_at": "2026-10-16T02:13:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/bobberrisford/affiliatemcp",
   "package": "npm:affiliate-networks-mcp@0.19.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.agenticaffiliate.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 34 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at dist/core/entitlement.d.ts:30; Base64 High Entropy String at dist/core/entitlement.js:34; Secret Keyword at dist/networks/2performant/auth.d.ts:39; Secret Keyword at dist/networks/2performant/auth.js:43; Hex High Entropy String at dist/networks/admitad/setup.js:34; Secret Keyword at dist/networks/adrecord/auth.d.ts:27; Secret Keyword at dist/networks/adrecord/auth.js:32; Hex High Entropy String at dist/networks/adtraction-advertiser/setup.js:31; Hex High Entropy String at dist/networks/adtraction/setup.js:26; Base64 High Entropy String at dist/networks/cake/setup.js:54; …and 24 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 66 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 1 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 79 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 44,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENCE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.agentutility/mcp-agentops",
   "version": "0.1.1",
   "slug": "ai-agentutility-mcp-agentops",
   "scanned_at": "2026-10-16T02:13:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/rooz21/x402",
   "package": "npm:@agentutility/mcp-agentops@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (2 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:19; Secret Keyword at README.md:37",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.agentutility/mcp-matchpoint",
   "version": "0.1.4",
   "slug": "ai-agentutility-mcp-matchpoint",
   "scanned_at": "2026-10-16T02:13:09+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/rooz21/x402",
   "package": "npm:@agentutility/mcp-matchpoint@0.1.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (2 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:19; Secret Keyword at README.md:37",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.agentutility/mcp-mediakit",
   "version": "0.11.9",
   "slug": "ai-agentutility-mcp-mediakit",
   "scanned_at": "2026-10-16T02:13:11+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/rooz21/x402",
   "package": "npm:@agentutility/mcp-mediakit@0.11.9",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (2 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:19; Secret Keyword at README.md:37",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.agentutility/mcp-statline",
   "version": "0.1.3",
   "slug": "ai-agentutility-mcp-statline",
   "scanned_at": "2026-10-16T02:13:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/rooz21/x402",
   "package": "npm:@agentutility/mcp-statline@0.1.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (2 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:19; Secret Keyword at README.md:37",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.ankimcp/anki-mcp-server",
   "version": "0.27.0",
   "slug": "ai-ankimcp-anki-mcp-server",
   "scanned_at": "2026-10-16T02:13:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ankimcp/anki-mcp-server",
   "package": "npm:@ankimcp/anki-mcp-server@0.27.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 11 issue(s) in the last 6 months: 0.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 12 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.ankimcp/anki-mcp-server-addon",
   "version": "0.40.0",
   "slug": "ai-ankimcp-anki-mcp-server-addon",
   "scanned_at": "2026-10-16T02:13:17+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ankimcp/anki-mcp-server-addon",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "unknown",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "b67c914b4560944b095eb58a94c4e9b821a72128",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 158,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 68,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "anki_mcp_server/dependency_loader.py",
       "line": 1125,
       "excerpt": "                if \".dist-info\" in member:\n                    continue\n                zf.extract(member, temp_dir)\n\n        # Remove wheel file",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": ".github/scripts/check_registry_version.py",
       "line": 130,
       "excerpt": "    )\n    try:\n        with urllib.request.urlopen(request, timeout=REQUEST_TIMEOUT) as response:\n            return response.status, response.read().decode(\"utf-8\", \"replace\"), \"ok\"\n    except urllib.error.HTTPError as exc:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anki_mcp_server/dependency_loader.py",
       "line": 867,
       "excerpt": "    the check is skipped whenever ``response.chunked`` is true.\n    \"\"\"\n    with urllib.request.urlopen(pypi_url, timeout=_NETWORK_TIMEOUT_SECONDS) as response:\n        chunked = getattr(response, \"chunked\", False)\n        try:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anki_mcp_server/dependency_loader.py",
       "line": 949,
       "excerpt": "    wrong percentage is harmless where a wrongly rejected download is not.\n    \"\"\"\n    with urllib.request.urlopen(wheel_url, timeout=_NETWORK_TIMEOUT_SECONDS) as response:\n        chunked = getattr(response, \"chunked\", False)\n        try:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anki_mcp_server/primitives/essential/tools/store_media_file_tool.py",
       "line": 87,
       "excerpt": "\n        try:\n            with urllib.request.urlopen(url, timeout=30) as response:\n                return response.read(), \"url\"\n        except urllib.error.HTTPError as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": null,
     "reason": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "the registry entry declares no transport for any package or remote",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:404; Base64 High Entropy String at tests/e2e/test_media_security.py:12; Base64 High Entropy String at tests/e2e/test_media_tools.py:11",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 11 issue(s) in the last 6 months: 0.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 5 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source: requirements.txt does not pin every requirement to one exact version, so dependency versions are unresolved and no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.arpi/arpi-mcp",
   "version": "1.0.0",
   "slug": "ai-arpi-arpi-mcp",
   "scanned_at": "2026-10-16T02:13:21+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/arpi-ai/arpi-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "2bc4d463b832257a5dfa165b70074d397453abd3",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.arpi.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 61,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 100 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 19,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.atdev/supershopping",
   "version": "1.0.0",
   "slug": "ai-atdev-supershopping",
   "scanned_at": "2026-10-16T02:13:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/alex-hoyeol-choi/headless-commerce",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://supershopping-mcp.atdev.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/alex-hoyeol-choi/headless-commerce) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.authoryze/authoryze",
   "version": "1.0.1",
   "slug": "ai-authoryze-authoryze",
   "scanned_at": "2026-10-16T02:13:24+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/kevinfee3/authoryze-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "a7db8e4ad39e255fd3a2ea0641cbc30186e9a789",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) Authorization that are not required on every declared endpoint — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://authoryze.ai/api/mcp",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://authoryze.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 62,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 55 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 13.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.autonomad/travel",
   "version": "1.4.4",
   "slug": "ai-autonomad-travel",
   "scanned_at": "2026-10-16T02:13:26+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Autonomad1/autonomad1",
   "package": "npm:autonomad-travel@1.4.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (2 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.autonomad.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.blast-radius/blast-radius",
   "version": "0.1.0",
   "slug": "ai-blast-radius-blast-radius",
   "scanned_at": "2026-10-16T02:13:27+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/kipmcc/blast-radius-live",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://blast-radius.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/kipmcc/blast-radius-live) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.boundaryai/boundaryai",
   "version": "0.7.31",
   "slug": "ai-boundaryai-boundaryai",
   "scanned_at": "2026-10-16T02:13:28+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/skvcool-rgb/BoundaryAI",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.boundaryai.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/skvcool-rgb/BoundaryAI) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.bowmark/bowmark",
   "version": "8.178.1",
   "slug": "ai-bowmark-bowmark",
   "scanned_at": "2026-10-16T02:13:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/bowmark-ai/skill",
   "package": "pypi:bowmark-mcp@2.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.bowmark.ai/mcp/registry; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (BOWMARK_API_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 5 day(s) ago (by tags), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 34,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "anyio 4.14.1 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.28.1 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "cryptography 49.0.0 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4143",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4143",
       "finding": "pyjwt:PYSEC-2026-4143",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4150",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4150",
       "finding": "pyjwt:PYSEC-2026-4150",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4151",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4151",
       "finding": "pyjwt:PYSEC-2026-4151",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.14.1 — PYSEC-2026-4023",
       "detail": "transitive, CVSS 7.0, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4023",
       "finding": "anyio:PYSEC-2026-4023",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.14.1 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4142",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4142",
       "finding": "pyjwt:PYSEC-2026-4142",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 17,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "pyproject.toml declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.cabrini/market-data",
   "version": "1.1.0",
   "slug": "ai-cabrini-market-data",
   "scanned_at": "2026-10-16T02:13:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/nlapi/cabrini-py",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "9b04e1b499e940bde41e5ffc011da553aa82812b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://cabrini.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 69,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 82 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 6.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.calendarmcp/server",
   "version": "1.0.0",
   "slug": "ai-calendarmcp-server",
   "scanned_at": "2026-10-16T02:13:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Full-Vibe/calendarmcp-public",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "cb6a55d7eaf2fdb3cbeb65846ad83ac31c2ef683",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://calendarmcp.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "11 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 54,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 131 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 15.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "docs/changelog.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.callmcp/server",
   "version": "0.1.2",
   "slug": "ai-callmcp-server",
   "scanned_at": "2026-10-16T02:13:38+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/CallMCP/callmcp",
   "package": "npm:@callmcp/server@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "613339bf86b10b1e59dcdc261a87622c9fe35768",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 32,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:36",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 43,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 97 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 3 issue(s) in the last 6 months: 56.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.canaryusers/canaryusers",
   "version": "1.2.2",
   "slug": "ai-canaryusers-canaryusers",
   "scanned_at": "2026-10-16T02:13:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/CanaryUsers-ai/canaryusers-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "d07636f37b6e157a99620a381f09b2e8576ac7da",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.canaryusers.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 54,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 125 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 9.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.certscore/mcp",
   "version": "0.2.4",
   "slug": "ai-certscore-mcp",
   "scanned_at": "2026-10-16T02:13:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ergoveritas1-alt/certscore.ai",
   "package": "npm:@certscore/mcp@0.2.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "0a2d7e74d2628b0be560847466cf56f388e85720",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2886,
   "files_pruned": 9,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 0,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release; 565 findings in test code are listed but not deducted; 9 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 26 files could not be parsed and were not scanned",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 706,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/validation-worker/scripts/live-consent-audit.ts",
       "line": 1771,
       "excerpt": "      console.info(`[consent-audit] scenario start ${hostname} ${scenario}`);\n      try {\n        scenarios[scenario] = await runScenario(siteDir, target, scenario);\n      } catch (error) {\n        console.error(`[consent-audit] scenario failed ${hostname} ${scenario}`, error);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/validation-worker/scripts/live-consent-audit.ts",
       "line": 1774,
       "excerpt": "      } catch (error) {\n        console.error(`[consent-audit] scenario failed ${hostname} ${scenario}`, error);\n        scenarios[scenario] = scenarioErrorResult(target, scenario, error);\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/validation-worker/src/full-site/scheduler.ts",
       "line": 427,
       "excerpt": "    }\n    try {\n      byHost[host] = parseCrawlRobots(robots.text, getCrawlerProductToken());\n    } catch {\n      diagnostics.push(discoveryDiagnostic(\"robots\", `https://${host}/robots.txt`, \"invalid_robots\", robots.status));",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/validation-worker/src/full-site/scheduler.ts",
       "line": 686,
       "excerpt": "      const routes = { ...options.queueUrls };\n      for (const region of [\"eu-central-1\", \"eu-west-1\", \"us-west-1\"]) {\n        if (localInventoryEnabled()) routes[region] ||= \"local\";\n      }\n      await stopCrawlsWithoutDispatchQueues(routes);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/components/scans/gdpr-eprivacy-coverage-checklist-card.tsx",
       "line": 2941,
       "excerpt": "            delete next[rowId];\n          } else {\n            next[rowId] = \"error\";\n          }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/components/scanso2/gdpr-eprivacy-coverage-checklist-card.tsx",
       "line": 2954,
       "excerpt": "            delete next[rowId];\n          } else {\n            next[rowId] = \"error\";\n          }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/admin/activity-search.ts",
       "line": 98,
       "excerpt": "\n  for (const field of Object.keys(exclusions) as Array<keyof AdminActivitySearchExclusions>) {\n    exclusions[field] = [...new Set(exclusions[field])];\n  }\n  return { exclusions, query: remaining || null, source };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/admin/v2-shadow-preview.ts",
       "line": 276,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/attribution/campaign-attribution.ts",
       "line": 44,
       "excerpt": "    const value = sanitizeValue(record[key]);\n    if (value) {\n      normalized[key] = value;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/attribution/campaign-attribution.ts",
       "line": 57,
       "excerpt": "    const value = params.get(key);\n    if (value !== null) {\n      values[key] = value;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/pulse/calibration-context.ts",
       "line": 16,
       "excerpt": "    const value = record[key];\n    if (typeof value === \"string\") {\n      output[key] = value.slice(0, 80);\n    } else if (typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n      output[key] = value;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/pulse/calibration-context.ts",
       "line": 18,
       "excerpt": "      output[key] = value.slice(0, 80);\n    } else if (typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n      output[key] = value;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/pulse/projection.ts",
       "line": 308,
       "excerpt": "    }\n    if (typeof value === \"string\") {\n      output[key] = value.slice(0, 240);\n    } else if (typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n      output[key] = value;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/pulse/projection.ts",
       "line": 310,
       "excerpt": "      output[key] = value.slice(0, 240);\n    } else if (typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n      output[key] = value;\n    } else if (Array.isArray(value)) {\n      output[key] = value",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/pulse/projection.ts",
       "line": 312,
       "excerpt": "      output[key] = value;\n    } else if (Array.isArray(value)) {\n      output[key] = value\n        .slice(0, 20)\n        .flatMap((entry) => {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/pulse/projection.ts",
       "line": 321,
       "excerpt": "        });\n    } else if (value && typeof value === \"object\") {\n      output[key] = safeRecordSubset(value as Record<string, unknown>, Object.keys(value).slice(0, 20));\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/scans/executive-findings-projection.ts",
       "line": 4618,
       "excerpt": "      const value = packet.evidence?.counts?.[key];\n      if (value !== undefined && (typeof value === \"number\" || value === null)) {\n        timing[key] = value;\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/scans/gdpr-eprivacy-coverage-policy.ts",
       "line": 11724,
       "excerpt": "",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/scans/scan-report-review-findings.ts",
       "line": 1045,
       "excerpt": "    const values = mergeStringArrayEvidence(baseFallbackEvidence[key], hybridFallbackEvidence[key]);\n    if (values.length > 0) {\n      merged[key] = values;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/scans/supplemental-runtime-unified-findings.ts",
       "line": 60,
       "excerpt": "    const value = record[key] ?? entities?.[key];\n    if (value !== undefined) {\n      proof[key] = value;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/scans/unified-findings.ts",
       "line": 2306,
       "excerpt": "    const value = normalizedFallbackEvidence[key];\n    if (typeof value === \"number\" && Number.isFinite(value)) {\n      counts[key] = value;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/scans/unified-findings.ts",
       "line": 2320,
       "excerpt": "      const value = summary[key];\n      if (typeof value === \"number\" && Number.isFinite(value)) {\n        counts[key] = value;\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/scans/unified-findings.ts",
       "line": 2336,
       "excerpt": "      const value = verification[key];\n      if (typeof value === \"number\" && Number.isFinite(value)) {\n        counts[key] = value;\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/lib/scans/unified-findings.ts",
       "line": 3297,
       "excerpt": "    ]) {\n      if (Array.isArray(summary[key])) {\n        entities[key] = uniqueStrings(summary[key] as string[]);\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/scripts/audit-production-evidence-loss.ts",
       "line": 553,
       "excerpt": "    }));\n    const summary = summarizePromotionBlockers(assessments);\n    drilldowns[findingId] = {\n      assessments,\n      blockerCounts: summary.blockerCounts,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/scripts/eval/build-finding-corpus.ts",
       "line": 1077,
       "excerpt": "    }\n\n    perFindingCounts[fid] = {\n      finding_label: label,\n      total_examples: posList.length + chalList.length,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/scripts/load-test-safety.ts",
       "line": 290,
       "excerpt": "\n    for (const label of entry.interruptionLabels.length > 0 ? entry.interruptionLabels : [\"none\"]) {\n      group.interruptionLabels[label] = (group.interruptionLabels[label] ?? 0) + 1;\n    }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/scripts/load-test-safety.ts",
       "line": 375,
       "excerpt": "      pagesScanned += Math.max(0, entry.pagesScanned ?? 0);\n      for (const label of entry.interruptionLabels.length > 0 ? entry.interruptionLabels : [\"none\"]) {\n        labelCounts[label] = (labelCounts[label] ?? 0) + 1;\n      }\n      for (const [key, value] of Object.entries(entry.errorCounters ?? {})) {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/server/ops/load-test-quality-history.ts",
       "line": 93,
       "excerpt": "    }\n    for (const findingId of seenInScan) {\n      findingScanCounts[findingId] = (findingScanCounts[findingId] ?? 0) + 1;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/server/ops/scanner-quality-normal-history.ts",
       "line": 231,
       "excerpt": "    }\n    for (const findingId of seenInScan) {\n      findingScanCounts[findingId] = (findingScanCounts[findingId] ?? 0) + 1;\n    }\n    pagesScanned += Math.max(0, row.pagesScanned);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/server/scans/get-scan-by-id.ts",
       "line": 123,
       "excerpt": "        all.findIndex((candidate) => JSON.stringify(candidate) === JSON.stringify(value)) === index\n      );\n      merged[key] = deduped.slice(0, 200);\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/server/scans/get-scan-by-id.ts",
       "line": 711,
       "excerpt": "\n    if ((currentValue === null || currentValue === undefined || currentValue === false || currentValue === 0) && previewValue !== null && previewValue !== undefined) {\n      merged[field] = previewValue;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/server/scans/local-v2-dag-lambda-dispatch.ts",
       "line": 668,
       "excerpt": "      : null;\n    if (sha256 && sizeBytes !== null && /^[a-f0-9]{64}$/i.test(sha256) && sizeBytes >= 0) {\n      artifactMetadata[field] = {\n        sha256: sha256.toLowerCase(),\n        sizeBytes",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "outputs/hosted-oauth-launch-2026-09-14/verify-public.mjs",
       "line": 6,
       "excerpt": "const paths=['/','/releases','/releases/mcp-hosted-oauth','/releases/mcp-light','/releases/accept-and-reject-path-testing','/developers/mcp','/developers/quickstart','/developers','/mcp/light','/claude','/releases/feed.xml','/sitemap.xml','/llms.txt','/llms-full.txt','/api-pulse-agent-guide.txt'];\nconst results=[];const bodies={};\nfor(const path of paths){const r=await fetch(origin+path);assert.equal(r.status,200,path);bodies[path]=await r.text();results.push({path,status:r.status});}\nfor(const path of ['/','/releases']){const b=bodies[path]; const slugOrder=['mcp-hosted-oauth','accept-and-reject-path-testing','mcp-light'].map(s=>b.indexOf('/releases/'+s));assert.ok(slugOrder.every(i=>i>=0));assert.ok(slugOrder[0]<slugOrder[1]&&slugOrder[1]<slugOrder[2],path+' order');}\nfor(const path of ['/developers/mcp','/developers/quickstart','/mcp/light','/llms.txt','/llms-full.txt','/api-pulse-agent-guide.txt'])assert.doesNotMatch(bodies[path],/12 scan\\/report|Active Trial workspaces connecting|No separate Connect screen|approve the connection once|exactly the three Light tools|certscore_get_scan_bundle only/);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-mcp/src/server.ts",
       "line": 274,
       "excerpt": "  for (const key of [\"scanId\", \"jobId\", \"findingId\"]) {\n    const token = boundedTelemetryToken(args[key], 128);\n    if (token) values[key] = token;\n  }\n  for (const key of [\"maxWaitSeconds\", \"maxBytes\", \"maxFindings\", \"maxPreConsentRows\", \"maxRows\", \"limit\", \"offset\"]) {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-mcp/src/server.ts",
       "line": 278,
       "excerpt": "  for (const key of [\"maxWaitSeconds\", \"maxBytes\", \"maxFindings\", \"maxPreConsentRows\", \"maxRows\", \"limit\", \"offset\"]) {\n    const value = args[key];\n    if (typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 1_000_000) values[key] = value;\n  }\n  if (typeof args.waitForCompletion === \"boolean\") values.waitForCompletion = args.waitForCompletion;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-mcp/src/server.ts",
       "line": 368,
       "excerpt": "  for (const key of [\"scope\", \"windowId\"] as const) {\n    const value = boundedTelemetryToken(creation?.[key], 128);\n    if (value) projected[key] = value;\n  }\n  for (const key of [\"retryAfterSeconds\", \"limit\", \"used\", \"windowSeconds\"] as const) {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-mcp/src/server.ts",
       "line": 372,
       "excerpt": "  for (const key of [\"retryAfterSeconds\", \"limit\", \"used\", \"windowSeconds\"] as const) {\n    const value = key === \"retryAfterSeconds\" ? error[key] : creation?.[key];\n    if (typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 1_000_000) projected[key] = value;\n  }\n  return projected;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/cli/shadow-project.ts",
       "line": 227,
       "excerpt": "    addCounts(rowsByStatus, site.rowsByStatus);\n    for (const warning of site.sanitizationWarnings) {\n      sanitizationWarningCounts[warning] = (sanitizationWarningCounts[warning] ?? 0) + 1;\n    }\n    for (const moduleRun of site.moduleStatuses) {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/cli/shadow-project.ts",
       "line": 236,
       "excerpt": "    addPreferenceCenterTraversal(preferenceCenterTraversal, site.preferenceCenterTraversal);\n    for (const key of site.topRowKeys) {\n      rowKeyCounts[key] = (rowKeyCounts[key] ?? 0) + 1;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/cli/shadow-project.ts",
       "line": 394,
       "excerpt": ") {\n  for (const key of Object.keys(target) as EndpointGroupKind[]) {\n    target[key] += source[key];\n  }\n}",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/cli/shadow-project.ts",
       "line": 428,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/wc01-shadow-output.ts",
       "line": 534,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/wc01-v2-allowlist-output.ts",
       "line": 683,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/wc01-v2-concern-policy-comparison-output.ts",
       "line": 403,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/wc01-v2-concern-policy-input-output.ts",
       "line": 527,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/wc01-v2-concern-policy-shape-comparison-output.ts",
       "line": 172,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/wc01-v2-concern-policy-simulation-output.ts",
       "line": 413,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/wc01-v2-limited-admin-preview-approval-metadata-output.ts",
       "line": 160,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/certscore-report-adapter/src/wc01-v2-limited-admin-preview-implementation-proposal-output.ts",
       "line": 174,
       "excerpt": "  const counts: Record<string, number> = {};\n  for (const value of values) {\n    counts[value] = (counts[value] ?? 0) + 1;\n  }\n  return counts;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:49; Base64 High Entropy String at dist/certscore-mcp.mjs:19026",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (2 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 21 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.clarx/mcp",
   "version": "0.2.2",
   "slug": "ai-clarx-mcp",
   "scanned_at": "2026-10-16T02:14:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Gernika-Labs/clarx-cloud",
   "package": "npm:@clarxai/mcp@0.2.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (1 file under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.clawfetch/mcp",
   "version": "0.3.2",
   "slug": "ai-clawfetch-mcp",
   "scanned_at": "2026-10-16T02:14:48+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/clawfetch/clawfetch-mcp",
   "package": "npm:@clawfetch/mcp@0.3.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "1dea0e3987c167a7ad025cd7f89c6d4edbef8191",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 15,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 0.3.2, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 27 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:33; Base64 High Entropy String at dist/index.js:2644; Base64 High Entropy String at dist/index.js:13506; Secret Keyword at dist/index.js:17738; Secret Keyword at dist/index.js:17739; Base64 High Entropy String at dist/index.js:22594; Base64 High Entropy String at dist/index.js:22825; Hex High Entropy String at dist/index.js:33493; Secret Keyword at dist/index.js:33493; Base64 High Entropy String at dist/index.js:33606; …and 17 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 5 issue(s) in the last 6 months: 32.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 21 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.clize/sites",
   "version": "0.35.5",
   "slug": "ai-clize-sites",
   "scanned_at": "2026-10-16T02:14:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/cooldk/clize-cli",
   "package": "npm:@clize/sites@0.35.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 60,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 43.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 21,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.clize/storefront",
   "version": "0.35.5",
   "slug": "ai-clize-storefront",
   "scanned_at": "2026-10-16T02:14:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/cooldk/clize-cli",
   "package": "npm:@clize/storefront@0.35.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 60,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 43.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 26,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.cotal/cotal",
   "version": "1.1.0",
   "slug": "ai-cotal-cotal",
   "scanned_at": "2026-10-16T02:14:56+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Cotal-AI/Cotal",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "2cf01b05df86cda487d62a3aceffd6e367d4e0d0",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1613,
   "files_pruned": 3,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 0,
     "reason": "3 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 17 files could not be parsed and were not scanned",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 81,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "bin/smoke/repro-1607.smoke.ts",
       "line": 165,
       "excerpt": "\n  // Recovery run\n  const recoverRun = execSync(`node ${PROOF_TOOL} --recover`, { cwd: fixtureDir, encoding: \"utf8\" });\n  const finalGitStatus = execSync(\"git status --porcelain\", { cwd: fixtureDir, encoding: \"utf8\" }).trim();\n  const recoveredClean = finalGitStatus === \"\" && !readFileSync(join(fixtureDir, \"src/impl.js\"), \"utf8\").includes(\"if (false)\");",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "bin/smoke/repro-1607.smoke.ts",
       "line": 165,
       "excerpt": "\n  // Recovery run\n  const recoverRun = execSync(`node ${PROOF_TOOL} --recover`, { cwd: fixtureDir, encoding: \"utf8\" });\n  const finalGitStatus = execSync(\"git status --porcelain\", { cwd: fixtureDir, encoding: \"utf8\" }).trim();\n  const recoveredClean = finalGitStatus === \"\" && !readFileSync(join(fixtureDir, \"src/impl.js\"), \"utf8\").includes(\"if (false)\");",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 174,
       "excerpt": "  const mgrPid = Number(readFileSync(canonicalLocalProcessPath(MANAGER_PIDFILE, { root, space: SPACE }), \"utf8\").trim());\n  // Children first (the launched worker's process tree), then the manager itself.\n  const kids = (() => { try { return execSync(`pgrep -P ${mgrPid}`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n  for (const k of kids) { try { execSync(`pkill -9 -P ${k}`); } catch { /* leaf */ } try { process.kill(Number(k), \"SIGKILL\"); } catch { /* gone */ } }\n  try { process.kill(mgrPid, \"SIGKILL\"); } catch { /* gone */ }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 174,
       "excerpt": "  const mgrPid = Number(readFileSync(canonicalLocalProcessPath(MANAGER_PIDFILE, { root, space: SPACE }), \"utf8\").trim());\n  // Children first (the launched worker's process tree), then the manager itself.\n  const kids = (() => { try { return execSync(`pgrep -P ${mgrPid}`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n  for (const k of kids) { try { execSync(`pkill -9 -P ${k}`); } catch { /* leaf */ } try { process.kill(Number(k), \"SIGKILL\"); } catch { /* gone */ } }\n  try { process.kill(mgrPid, \"SIGKILL\"); } catch { /* gone */ }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 175,
       "excerpt": "  // Children first (the launched worker's process tree), then the manager itself.\n  const kids = (() => { try { return execSync(`pgrep -P ${mgrPid}`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n  for (const k of kids) { try { execSync(`pkill -9 -P ${k}`); } catch { /* leaf */ } try { process.kill(Number(k), \"SIGKILL\"); } catch { /* gone */ } }\n  try { process.kill(mgrPid, \"SIGKILL\"); } catch { /* gone */ }\n  await wait(500);",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 175,
       "excerpt": "  // Children first (the launched worker's process tree), then the manager itself.\n  const kids = (() => { try { return execSync(`pgrep -P ${mgrPid}`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n  for (const k of kids) { try { execSync(`pkill -9 -P ${k}`); } catch { /* leaf */ } try { process.kill(Number(k), \"SIGKILL\"); } catch { /* gone */ } }\n  try { process.kill(mgrPid, \"SIGKILL\"); } catch { /* gone */ }\n  await wait(500);",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 234,
       "excerpt": "  // Crash the replacement supervisor + its child, again before any deprovision. The supervise\n  // cmdline carries this run's unique random SPACE token, so the sweep is surgically scoped.\n  const mgrPids2 = (() => { try { return execSync(`pgrep -f \"supervise.*${SPACE}\"`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n  check(\"found the replacement supervisor to crash\", mgrPids2.length > 0, mgrPids2);\n  for (const p of mgrPids2) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 234,
       "excerpt": "  // Crash the replacement supervisor + its child, again before any deprovision. The supervise\n  // cmdline carries this run's unique random SPACE token, so the sweep is surgically scoped.\n  const mgrPids2 = (() => { try { return execSync(`pgrep -f \"supervise.*${SPACE}\"`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n  check(\"found the replacement supervisor to crash\", mgrPids2.length > 0, mgrPids2);\n  for (const p of mgrPids2) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 237,
       "excerpt": "  check(\"found the replacement supervisor to crash\", mgrPids2.length > 0, mgrPids2);\n  for (const p of mgrPids2) {\n    const kids2 = (() => { try { return execSync(`pgrep -P ${p}`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n    for (const k of kids2) { try { execSync(`pkill -9 -P ${k}`); } catch { /* leaf */ } try { process.kill(Number(k), \"SIGKILL\"); } catch { /* gone */ } }\n    try { process.kill(Number(p), \"SIGKILL\"); } catch { /* gone */ }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 237,
       "excerpt": "  check(\"found the replacement supervisor to crash\", mgrPids2.length > 0, mgrPids2);\n  for (const p of mgrPids2) {\n    const kids2 = (() => { try { return execSync(`pgrep -P ${p}`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n    for (const k of kids2) { try { execSync(`pkill -9 -P ${k}`); } catch { /* leaf */ } try { process.kill(Number(k), \"SIGKILL\"); } catch { /* gone */ } }\n    try { process.kill(Number(p), \"SIGKILL\"); } catch { /* gone */ }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 238,
       "excerpt": "  for (const p of mgrPids2) {\n    const kids2 = (() => { try { return execSync(`pgrep -P ${p}`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n    for (const k of kids2) { try { execSync(`pkill -9 -P ${k}`); } catch { /* leaf */ } try { process.kill(Number(k), \"SIGKILL\"); } catch { /* gone */ } }\n    try { process.kill(Number(p), \"SIGKILL\"); } catch { /* gone */ }\n  }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "implementations/auth/smoke/down-manifest-usermode.smoke.ts",
       "line": 238,
       "excerpt": "  for (const p of mgrPids2) {\n    const kids2 = (() => { try { return execSync(`pgrep -P ${p}`, { encoding: \"utf8\" }).trim().split(\"\\n\").filter(Boolean); } catch { return []; } })();\n    for (const k of kids2) { try { execSync(`pkill -9 -P ${k}`); } catch { /* leaf */ } try { process.kill(Number(k), \"SIGKILL\"); } catch { /* gone */ } }\n    try { process.kill(Number(p), \"SIGKILL\"); } catch { /* gone */ }\n  }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "packages/lang/smoke/differential.smoke.ts",
       "line": 109,
       "excerpt": " * The worker's evaluator is the confined one.\n */\nconst evaluate = (module: string) => new Function(`return (${module})`)() as never;\n\ninterface Arm {",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "scripts/mutation-coverage.mjs",
       "line": 1907,
       "excerpt": "  let output;\n  try {\n    output = execSync(cfg.command, { encoding: \"utf8\", stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n  } catch (error) {\n    failed++;",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "scripts/mutation-proof.selftest.mjs",
       "line": 747,
       "excerpt": "const timed = join(root, \"src/impl.js\");\nconst OLD_MS = Date.now() - 3600_000;\nexecSync(`touch -d ${JSON.stringify(new Date(OLD_MS).toISOString())} ${JSON.stringify(timed)}`);\nconst mtimeBefore = statSync(timed).mtimeMs;\nconst startedMs = Date.now();",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "scripts/mutation-proof.selftest.mjs",
       "line": 747,
       "excerpt": "const timed = join(root, \"src/impl.js\");\nconst OLD_MS = Date.now() - 3600_000;\nexecSync(`touch -d ${JSON.stringify(new Date(OLD_MS).toISOString())} ${JSON.stringify(timed)}`);\nconst mtimeBefore = statSync(timed).mtimeMs;\nconst startedMs = Date.now();",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "bin/smoke/backup-conservation-live.smoke.ts",
       "line": 162,
       "excerpt": "      for (const stream of spaceBackupInventory(mesh.space).full) {\n        const { state } = await jsRequest<{ state: StreamState }>(nc, `$JS.API.STREAM.INFO.${stream}`, {});\n        streams[stream] = { messages: state.messages, first_seq: state.first_seq, last_seq: state.last_seq };\n        for (let offset = 0;;) {\n          const page = await jsRequest<{ consumers?: RawConsumer[]; total: number; offset: number }>(",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "bin/smoke/shard-never-ran.smoke.ts",
       "line": 39,
       "excerpt": "      mkdirSync(dirname(join(dir, entry)), { recursive: true });\n      writeFileSync(join(dir, entry), body);\n      scripts[name] = `tsx ${entry}`;\n    }\n    writeFileSync(join(dir, \"package.json\"), JSON.stringify({ private: true, packageManager, scripts }));",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "extensions/connector-claude-code/smoke/launch-env.smoke.ts",
       "line": 149,
       "excerpt": "  delete process.env.PATH;\n  delete process.env.Path;\n  process.env[spelling] = ambientPath;\n  const row =\n    claudeConnector.buildLaunch({ space: \"smoke\", name: `claude-path-${spelling}`, events: false } as never).env ?? {};",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "extensions/connector-core/smoke/egress-guard-differential.smoke.ts",
       "line": 1160,
       "excerpt": "  const arms: Record<string, Arm> = {};\n  for (const ref of [PREDECESSOR, ADAPTER_FREE, \"HEAD\"]) {\n    arms[ref] = await loadArm(ref);\n    ok(`${ref}: classifier role bound`, Boolean(arms[ref]), arms[ref]?.role);\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "extensions/connector-hermes/bin/install.mjs",
       "line": 142,
       "excerpt": "    } else {\n      const before = meshEnv[k];\n      meshEnv[k] = before.replace(/127\\.0\\.0\\.1|localhost/g, \"host.docker.internal\");\n      warn(`Rewrote ${k}: ${before} → ${meshEnv[k]} (so the container can reach your host).`);\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "extensions/pi/pi-sdk.smoke.ts",
       "line": 611,
       "excerpt": "    for (const key of keys) {\n      if (prior[key] === undefined) delete process.env[key];\n      else process.env[key] = prior[key];\n    }\n    rmSync(root, { recursive: true, force: true });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "extensions/pi/pi.smoke.ts",
       "line": 817,
       "excerpt": "    const value = saved[key];\n    if (value === undefined) delete process.env[key];\n    else process.env[key] = value;\n  }\n}",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/auth/smoke/freeslot-respawn-barrier.smoke.ts",
       "line": 180,
       "excerpt": "  for (const k of [\"PATH\", \"HOME\", \"TMPDIR\", \"TMP\", \"TEMP\", \"XDG_CACHE_HOME\", \"LANG\", \"TERM\"]) {\n    const v = process.env[k];\n    if (v) out[k] = v;\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/auth/smoke/int2-revoke-hold.smoke.ts",
       "line": 149,
       "excerpt": "  for (const k of [\"PATH\", \"HOME\", \"TMPDIR\", \"TMP\", \"TEMP\", \"XDG_CACHE_HOME\", \"LANG\", \"TERM\"]) {\n    const v = process.env[k];\n    if (v) out[k] = v;\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/auth/smoke/user-spawn.smoke.ts",
       "line": 148,
       "excerpt": "  for (const k of [\"PATH\", \"HOME\", \"TMPDIR\", \"TMP\", \"TEMP\", \"XDG_CACHE_HOME\", \"LANG\", \"TERM\", \"NODE_EXTRA_CA_CERTS\"]) {\n    const v = process.env[k];\n    if (v) out[k] = v;\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/auth/smoke/user-spawn.smoke.ts",
       "line": 727,
       "excerpt": "    check(`precondition: kappa remained alive to receive the ${want} status signal`, signalSent);\n    const reached = signalSent && await until(() => rosterOf(\"kappa\") === want);\n    carried[want] = reached ? meshOf(\"kappa\") : `the roster never reached ${want} (it says ${rosterOf(\"kappa\")})`;\n  }\n  check(",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/auth/src/retirement-barrier.ts",
       "line": 789,
       "excerpt": "        throw new EpEnvelopeError(\"failed-precondition\", `the frontier step cannot read the stream ${stream} named by the intent; a missing cutoff never closes a lifecycle interval (SPEC 13.1): ${(e as Error)?.message ?? String(e)}`);\n      }\n      frontiers[stream] = last;\n    }\n    const record: FrontierRecord = { lifecycleUid: intent.lifecycleUid, opId, streams: frontiers };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/cli/smoke/legacy-packaged-manager.smoke.ts",
       "line": 129,
       "excerpt": "      const path = realHelper(arch);\n      const present = existsSync(path);\n      snapshot[arch] = {\n        present,\n        sha256: present ? createHash(\"sha256\").update(readFileSync(path)).digest(\"hex\") : null,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/cli/smoke/seed.smoke.ts",
       "line": 122,
       "excerpt": "  for (const file of [\"symlinked-bin.smoke.ts\", \"downgrade-hint.smoke.ts\"]) {\n    files.splice(files.indexOf(file), 1);\n    excluded[file] = \"Unix executable/symlink scenario; unchanged Windows exclusion\";\n  }\n}",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/cli/src/commands/backup.ts",
       "line": 131,
       "excerpt": "    if (streamInfo.error) throw new Error(streamInfo.error.description ?? `JetStream stream info failed for ${stream}`);\n    if (!streamInfo.state) throw new Error(`JetStream omitted stream state for ${stream}`);\n    statesByStream[stream] = validateBackupStreamState(streamInfo.state);\n    const consumers: ConsumerInfo[] = [];\n    try {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/cli/src/commands/backup.ts",
       "line": 145,
       "excerpt": "      throw new Error(`isolated backup cannot enumerate consumers for ${stream}: ${(error as Error).message}`);\n    }\n    consumersByStream[stream] = consumers;\n  }\n  if (selected === \"registry\") {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/cli/src/lib/agent-skills.ts",
       "line": 197,
       "excerpt": "    mkdirSync(dir, { recursive: true });\n    writeOwnedFile(destFile, canonical); // write ONLY our file, via rename (never truncates a hard-linked inode); never delete or replace anything else in the dir\n    manifest.skills[name] = digest(canonical);\n  }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/delivery/smoke/hosted-delivery-startup-isolation.smoke.ts",
       "line": 156,
       "excerpt": "    const env: NodeJS.ProcessEnv = { PATH: process.env.PATH, LANG: \"C.UTF-8\", COTAL_STARTUP_PROOF_CHILD: \"1\", COTAL_STARTUP_PROOF_INPUT: inputPath, COTAL_DELIVERY_BROKER_GONE_MS: \"2500\", COTAL_DELIVERY_BROKER_GONE_BACKSTOP_MS: \"3000\" };\n    for (const key of [\"HOME\", \"XDG_CONFIG_HOME\", \"XDG_STATE_HOME\", \"XDG_CACHE_HOME\", \"XDG_DATA_HOME\", \"COTAL_HOME\", \"COTAL_SEAT_ROOT\", \"TMPDIR\"]) {\n      env[key] = join(root, key.toLowerCase()); mkdirSync(env[key]!, { recursive: true, mode: 0o700 });\n    }\n    child = spawn(process.execPath, [\"--import\", \"tsx\", fileURLToPath(import.meta.url)], { cwd: process.cwd(), env, stdio: [\"ignore\", \"pipe\", \"pipe\", \"ipc\"] });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/manager/smoke/remote-authority-expiry.smoke.ts",
       "line": 55,
       "excerpt": "    });\n    const token = jwtFromCreds(creds)!;\n    liveCredentials[name] = { jwt: token, exp: credsClaims(creds).exp! };\n  }\n  const liveMaterial = { ...bundleResult, accountPublicKey: auth.account.pub, credentials: liveCredentials,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/manager/smoke/remote-isolated-renewal.smoke.ts",
       "line": 137,
       "excerpt": "        issue: async () => {\n          const credentials = {} as NonNullable<RemoteManagerAuthorityMaterial[\"credentials\"]>;\n          for (const n of names) { const c = await sign(n); credentials[n] = { jwt: jwtFromCreds(c)!, exp: credsClaims(c).exp! }; }\n          return { credentials };\n        },",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/manager/smoke/remote-start-expiry-recovery.smoke.ts",
       "line": 147,
       "excerpt": "        issue: async () => {\n          const credentials = {} as NonNullable<RemoteManagerAuthorityMaterial[\"credentials\"]>;\n          for (const n of names) { const c = await sign(n); credentials[n] = { jwt: jwtFromCreds(c)!, exp: credsClaims(c).exp! }; }\n          return { credentials };\n        },",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/manager/src/manager.ts",
       "line": 1175,
       "excerpt": "  for (const bin of requires) {\n    const path = resolveOnPath(bin);\n    if (path) binaries[bin] = path;\n    else missing.push(bin);\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "implementations/runtime/src/mesh-handler.ts",
       "line": 2846,
       "excerpt": "  const out: Record<string, unknown> = {};\n  for (const k of [\"name\", \"owner\", \"actor\", \"uid\", \"readinessDeadlineMs\"] as const) {\n    if (floor[k] !== undefined) out[k] = floor[k];\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/core/smoke/history-recent.smoke.ts",
       "line": 200,
       "excerpt": "    const shadowed = ep as unknown as Record<string, unknown>;\n    const real = shadowed[method];\n    shadowed[method] = async () => { throw new Error(`forced ${method} truncation`); };\n    let doorThrew: unknown;\n    await ep.channelHistory(\"talk\", { limit: 10 }).then(",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/core/smoke/history-recent.smoke.ts",
       "line": 206,
       "excerpt": "      (e) => { doorThrew = e; },\n    );\n    shadowed[method] = real;\n    check(`channelHistory PROPAGATES a cut-short ${method} (never renders it as an empty channel)`,\n      doorThrew instanceof Error && /forced/.test(String((doorThrew as Error).message)), String(doorThrew));",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/core/src/connector-config.ts",
       "line": 202,
       "excerpt": "    const b = base.connectors?.[name];\n    const o = over.connectors?.[name];\n    connectors[name] = { ...b, ...o, mcpServers: { ...(b?.mcpServers ?? {}), ...(o?.mcpServers ?? {}) } };\n  }\n  // `spawn` replaces WHOLESALE rather than merging per key the way servers do. An allow-list is one",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/core/src/endpoint-cluster.ts",
       "line": 186,
       "excerpt": "        if (typeof v !== \"number\" || !Number.isSafeInteger(v) || v <= 0)\n          invalid(`command \"${name}\" admissionCeiling.${f} ${JSON.stringify(v)} is not a positive safe integer`);\n        nums[f] = v;\n      }\n      admissionCeiling = { maxBytes: nums.maxBytes, maxDepth: nums.maxDepth, maxItems: nums.maxItems };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/core/src/endpoint-envelope.ts",
       "line": 254,
       "excerpt": "    // eslint-disable-next-line no-control-regex\n    if (/[\\x00-\\x1f\\x7f]/.test(s)) fail(\"bad-request\", `correlation.${k} carries a control character`);\n    out[k] = s;\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/core/src/endpoint-envelope.ts",
       "line": 286,
       "excerpt": "    }\n    if (typeof d !== \"string\" || !isContractDigest(d)) fail(\"bad-request\", `op.${k} is not a sha256:<hex> digest`);\n    digests[k] = d;\n  }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/core/src/remote-manager-authority.ts",
       "line": 480,
       "excerpt": "    const id = (item as { id?: unknown }).id;\n    if (!isUserNkey(id)) fail(`identities.${name}.id must be a user nkey`);\n    identities[name] = { id };\n  }\n  return identities;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/lang/smoke/differential.smoke.ts",
       "line": 1087,
       "excerpt": "}\nfor (const m of [\"spawn\", \"turn\", \"ask\", \"checkpoint\", \"sleep\", \"wait\", \"notify\", \"monitor\", \"openConclave\", \"closeConclave\"]) {\n  (RefusesEverything.prototype as unknown as Record<string, unknown>)[m] = () => {\n    throw new Error(`${RefusesEverything.REACHED} (${m})`);\n  };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/lang/smoke/migrate.smoke.ts",
       "line": 65,
       "excerpt": "  const h: Record<string, unknown> = { now: () => (sim as unknown as { now: () => number }).now() };\n  for (const m of EFFECTS) {\n    h[m] = async (r: unknown, c: EffectContext) => {\n      asked.push(stepKeyString(c.key));\n      return await sim[m]!(r, c);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/lang/src/engine/bridge.ts",
       "line": 271,
       "excerpt": "  } as EffectHandler;\n  for (const m of METHODS) {\n    (handler as Record<Method, (req: unknown, ctx: EffectContext) => Promise<unknown>>)[m] = (req, ctx) => call(m, req, ctx);\n  }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/ci-validator-lock-acquisition.mjs",
       "line": 110,
       "excerpt": "  assert.equal(lstatSync(canonical).mtimeMs, toolStat.mtimeMs);\n  assert.equal(toolBytes.length, toolStat.size);\n  executablePaths[name] = { path: canonical, bytes: toolBytes.length, sha256: sha(toolBytes) };\n}\nassert.equal(executablePaths.node.path, realpathSync(process.execPath));",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 71,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://cotal.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "JSON Web Token at implementations/auth/smoke/login.smoke.ts:301; JSON Web Token at implementations/auth/smoke/login.smoke.ts:641; …and 1154 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 50 issue(s) in the last 6 months: 2.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 3 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "1 vulnerability could not be placed in `03` §6's table and is listed but not scored",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 96,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "astro 7.0.3 — GHSA-26w7-cxv4-gfx2",
       "detail": "direct, CVSS 9.8, fixed in 7.2.8",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26w7-cxv4-gfx2",
       "finding": "astro:GHSA-26w7-cxv4-gfx2",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "direct, CVSS 8.9, fixed in 0.35.4",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "direct, CVSS 8.9, fixed in 0.35.5",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "smol-toml 1.7.0 — GHSA-7w5x-hrqm-74c2",
       "detail": "direct, CVSS 8.2, fixed in 1.7.1",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7w5x-hrqm-74c2",
       "finding": "smol-toml:GHSA-7w5x-hrqm-74c2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "direct, CVSS 7.5, fixed in 7.29.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.5.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "direct, CVSS 7.5, fixed in 8.10.2",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "direct, CVSS 7.5, fixed in 7.29.1",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.20.1 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 8.21.0",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.5.0 — GHSA-4cwx-7wf7-3272",
       "detail": "direct, CVSS 7.4, fixed in 8.9.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4cwx-7wf7-3272",
       "finding": "undici:GHSA-4cwx-7wf7-3272",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-4cwx-7wf7-3272",
       "detail": "direct, CVSS 7.4, fixed in 7.29.0",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4cwx-7wf7-3272",
       "finding": "undici:GHSA-4cwx-7wf7-3272",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-w293-vg96-wgc3",
       "detail": "direct, CVSS 7.4, fixed in 7.29.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w293-vg96-wgc3",
       "finding": "undici:GHSA-w293-vg96-wgc3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.5.0 — GHSA-w293-vg96-wgc3",
       "detail": "direct, CVSS 7.4, fixed in 8.10.2",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w293-vg96-wgc3",
       "finding": "undici:GHSA-w293-vg96-wgc3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-w293-vg96-wgc3",
       "detail": "direct, CVSS 7.4, fixed in 7.29.1",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w293-vg96-wgc3",
       "finding": "undici:GHSA-w293-vg96-wgc3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "direct, CVSS 7.0, fixed in 0.35.0",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-cache-semantics 4.2.0 — GHSA-ch52-4w7c-c8xp",
       "detail": "transitive, CVSS 8.7",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ch52-4w7c-c8xp",
       "finding": "http-cache-semantics:GHSA-ch52-4w7c-c8xp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.1 — GHSA-mcm9-63f2-9j32",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mcm9-63f2-9j32",
       "finding": "devalue:GHSA-mcm9-63f2-9j32",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.1 — GHSA-r9w8-h9r3-54w4",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r9w8-h9r3-54w4",
       "finding": "devalue:GHSA-r9w8-h9r3-54w4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.1 — GHSA-x5rw-q4pp-hg5g",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5rw-q4pp-hg5g",
       "finding": "devalue:GHSA-x5rw-q4pp-hg5g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.12 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.15 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.12 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.15 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.1 — GHSA-2p49-hgcm-8545",
       "detail": "transitive, CVSS 8.2, fixed in 4.0.2",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2p49-hgcm-8545",
       "finding": "svgo:GHSA-2p49-hgcm-8545",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.1 — GHSA-w27v-7q3p-w38r",
       "detail": "transitive, CVSS 8.2, fixed in 4.1.0",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w27v-7q3p-w38r",
       "finding": "svgo:GHSA-w27v-7q3p-w38r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "toml 4.1.1 — GHSA-v5mp-jgw5-2x6j",
       "detail": "transitive, CVSS 8.2, fixed in 4.1.2",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v5mp-jgw5-2x6j",
       "finding": "toml:GHSA-v5mp-jgw5-2x6j",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.8",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.9",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.1 — GHSA-j22f-vq7h-c4qm",
       "detail": "transitive, CVSS 7.5, fixed in 5.9.3",
       "path": "website/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j22f-vq7h-c4qm",
       "finding": "devalue:GHSA-j22f-vq7h-c4qm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "remotion/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the only changelog is bin/CHANGELOG.md, inside a nested sub-project with its own package manifest — it describes that project, and whether it also covers this server cannot be told from the tree",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "docs/security.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.cralo/mcp",
   "version": "0.4.4",
   "slug": "ai-cralo-mcp",
   "scanned_at": "2026-10-16T02:16:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/amrnth/opentooler",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.cralo.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/amrnth/opentooler) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.creationloop/creationloop",
   "version": "0.1.0",
   "slug": "ai-creationloop-creationloop",
   "scanned_at": "2026-10-16T02:16:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/marino129/creationloop-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "d35e9771fa505ee4d362d605eaf442702ff6196f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://creationloop.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 74,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 42 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.creativescope/creative-intelligence",
   "version": "1.0.0",
   "slug": "ai-creativescope-creative-intelligence",
   "scanned_at": "2026-10-16T02:16:11+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/creativescope/creativescope-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "525c513dc02c16d83e2216ea552d67be5d9c955b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.creativescope.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dablock/visibility-index",
   "version": "1.0.1",
   "slug": "ai-dablock-visibility-index",
   "scanned_at": "2026-10-16T02:16:12+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/creanlab/ai-visibility-index",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "62184f0eb0a8f8e2ed5688c7cdfc25b5bebe8250",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "mcp-server/server.py",
       "line": 76,
       "excerpt": "    if domain is None:\n        raise FileNotFoundError(str(p))\n    with urllib.request.urlopen(f\"https://{domain}/{rel}\", timeout=20) as r:\n        return json.loads(r.read().decode(\"utf-8\"))\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/fetch_latest.py",
       "line": 20,
       "excerpt": "    for remote, local in FILES:\n        url = f\"https://{site}.ai/{remote}\"\n        with urllib.request.urlopen(url, timeout=30) as r:\n            (out / local).write_bytes(r.read())\n        print(f\"  {site}/{local}  <-  {url}\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://dablock.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 18,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dabyte/visibility-index",
   "version": "1.0.1",
   "slug": "ai-dabyte-visibility-index",
   "scanned_at": "2026-10-16T02:16:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/creanlab/ai-visibility-index",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "62184f0eb0a8f8e2ed5688c7cdfc25b5bebe8250",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "mcp-server/server.py",
       "line": 76,
       "excerpt": "    if domain is None:\n        raise FileNotFoundError(str(p))\n    with urllib.request.urlopen(f\"https://{domain}/{rel}\", timeout=20) as r:\n        return json.loads(r.read().decode(\"utf-8\"))\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/fetch_latest.py",
       "line": 20,
       "excerpt": "    for remote, local in FILES:\n        url = f\"https://{site}.ai/{remote}\"\n        with urllib.request.urlopen(url, timeout=30) as r:\n            (out / local).write_bytes(r.read())\n        print(f\"  {site}/{local}  <-  {url}\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://dabyte.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 18,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.darkfunnels/docs",
   "version": "1.0.0",
   "slug": "ai-darkfunnels-docs",
   "scanned_at": "2026-10-16T02:16:19+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/darkfunnels-ai/darkfunnels-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "0ba8c0d01ea954d3a329f393dac347d81fb79286",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://docs.darkfunnels.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 69,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 42 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 5.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 16,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.deinai/creator-skill",
   "version": "1.0.2",
   "slug": "ai-deinai-creator-skill",
   "scanned_at": "2026-10-16T02:16:21+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/deinai/deinai_backend",
   "package": "pypi:deinai-mcp@1.0.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential enforcement present in source but not documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://deinai.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (DEINAI_MCP_TOKEN) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.deskcrew/agentic",
   "version": "1.0.0",
   "slug": "ai-deskcrew-agentic",
   "scanned_at": "2026-10-16T02:16:24+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/papperkash/ttf-website-v3",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://deskcrew.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/papperkash/ttf-website-v3) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dinglebear/gotify-rmcp",
   "version": "0.1.3",
   "slug": "ai-dinglebear-gotify-rmcp",
   "scanned_at": "2026-10-16T02:16:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/jmagar/gotify-rmcp",
   "package": "npm:gotify-rmcp@0.1.3",
   "source_state": "unreachable",
   "source_subject": "package",
   "source_reason": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 13 days (by releases), last release 72 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the package this server declares (npm:gotify-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dinglebear/rapprise",
   "version": "0.3.0",
   "slug": "ai-dinglebear-rapprise",
   "scanned_at": "2026-10-16T02:16:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dinglebear-ai/rapprise",
   "package": "npm:@dinglebear/rapprise@0.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 193,
       "excerpt": "\n  for (const relative of new Set(runtimeFiles)) {\n    const text = fs.readFileSync(path.join(packageRoot, relative), \"utf8\");\n    assert(!text.includes('\"..\", \"..\"'), `${relative} must not resolve paths outside the package at runtime`);\n    assert(!text.includes(\"'..', '..'\"), `${relative} must not resolve paths outside the package at runtime`);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 261,
       "excerpt": "  for (const license of repoLicenseFiles()) {\n    assert(\n      Buffer.from(tarExtract(tarball, `package/${license}`)).equals(fs.readFileSync(path.join(repoRoot, license))),\n      `packed ${license} must match repo ${license}`,\n    );",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 73 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dinglebear/rgotify",
   "version": "0.2.0",
   "slug": "ai-dinglebear-rgotify",
   "scanned_at": "2026-10-16T02:16:27+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dinglebear-ai/rgotify",
   "package": "npm:@dinglebear/rgotify@0.2.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 193,
       "excerpt": "\n  for (const relative of new Set(runtimeFiles)) {\n    const text = fs.readFileSync(path.join(packageRoot, relative), \"utf8\");\n    assert(!text.includes('\"..\", \"..\"'), `${relative} must not resolve paths outside the package at runtime`);\n    assert(!text.includes(\"'..', '..'\"), `${relative} must not resolve paths outside the package at runtime`);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 261,
       "excerpt": "  for (const license of repoLicenseFiles()) {\n    assert(\n      Buffer.from(tarExtract(tarball, `package/${license}`)).equals(fs.readFileSync(path.join(repoRoot, license))),\n      `packed ${license} must match repo ${license}`,\n    );",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 13 days (by releases), last release 72 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dinglebear/rtailscale",
   "version": "0.1.4",
   "slug": "ai-dinglebear-rtailscale",
   "scanned_at": "2026-10-16T02:16:30+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dinglebear-ai/rtailscale",
   "package": "npm:@dinglebear/rtailscale@0.1.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 203,
       "excerpt": "\n  for (const relative of new Set(runtimeFiles)) {\n    const text = fs.readFileSync(path.join(packageRoot, relative), \"utf8\");\n    assert(!text.includes('\"..\", \"..\"'), `${relative} must not resolve paths outside the package at runtime`);\n    assert(!text.includes(\"'..', '..'\"), `${relative} must not resolve paths outside the package at runtime`);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 271,
       "excerpt": "  for (const license of repoLicenseFiles()) {\n    assert(\n      Buffer.from(tarExtract(tarball, `package/${license}`)).equals(fs.readFileSync(path.join(repoRoot, license))),\n      `packed ${license} must match repo ${license}`,\n    );",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://ts.dinglebear.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:132",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 4 days (by releases), last release 80 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dinglebear/runifi",
   "version": "0.2.5",
   "slug": "ai-dinglebear-runifi",
   "scanned_at": "2026-10-16T02:16:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dinglebear-ai/runifi",
   "package": "npm:@dinglebear/runifi@0.2.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 193,
       "excerpt": "\n  for (const relative of new Set(runtimeFiles)) {\n    const text = fs.readFileSync(path.join(packageRoot, relative), \"utf8\");\n    assert(!text.includes('\"..\", \"..\"'), `${relative} must not resolve paths outside the package at runtime`);\n    assert(!text.includes(\"'..', '..'\"), `${relative} must not resolve paths outside the package at runtime`);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 261,
       "excerpt": "  for (const license of repoLicenseFiles()) {\n    assert(\n      Buffer.from(tarExtract(tarball, `package/${license}`)).equals(fs.readFileSync(path.join(repoRoot, license))),\n      `packed ${license} must match repo ${license}`,\n    );",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (2 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 4 days (by releases), last release 80 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dinglebear/rytdl",
   "version": "1.0.4",
   "slug": "ai-dinglebear-rytdl",
   "scanned_at": "2026-10-16T02:16:35+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dinglebear-ai/rytdl",
   "package": "npm:@dinglebear/rytdl@1.0.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 193,
       "excerpt": "\n  for (const relative of new Set(runtimeFiles)) {\n    const text = fs.readFileSync(path.join(packageRoot, relative), \"utf8\");\n    assert(!text.includes('\"..\", \"..\"'), `${relative} must not resolve paths outside the package at runtime`);\n    assert(!text.includes(\"'..', '..'\"), `${relative} must not resolve paths outside the package at runtime`);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 261,
       "excerpt": "  for (const license of repoLicenseFiles()) {\n    assert(\n      Buffer.from(tarExtract(tarball, `package/${license}`)).equals(fs.readFileSync(path.join(repoRoot, license))),\n      `packed ${license} must match repo ${license}`,\n    );",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 65 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dinglebear/soma",
   "version": "0.10.0",
   "slug": "ai-dinglebear-soma",
   "scanned_at": "2026-10-16T02:16:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dinglebear-ai/soma",
   "package": "npm:@dinglebear/soma@0.10.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 194,
       "excerpt": "\n  for (const relative of new Set(runtimeFiles)) {\n    const text = fs.readFileSync(path.join(packageRoot, relative), \"utf8\");\n    assert(!text.includes('\"..\", \"..\"'), `${relative} must not resolve paths outside the package at runtime`);\n    assert(!text.includes(\"'..', '..'\"), `${relative} must not resolve paths outside the package at runtime`);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/check-package.js",
       "line": 262,
       "excerpt": "  for (const license of repoLicenseFiles()) {\n    assert(\n      Buffer.from(tarExtract(tarball, `package/${license}`)).equals(fs.readFileSync(path.join(repoRoot, license))),\n      `packed ${license} must match repo ${license}`,\n    );",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:717",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 18 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (26 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 72 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dinglebear/tailscale-rmcp",
   "version": "0.1.3",
   "slug": "ai-dinglebear-tailscale-rmcp",
   "scanned_at": "2026-10-16T02:16:39+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/jmagar/tailscale-rmcp",
   "package": "npm:tailscale-rmcp@0.1.3",
   "source_state": "unreachable",
   "source_subject": "package",
   "source_reason": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 4 days (by releases), last release 80 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the package this server declares (npm:tailscale-rmcp@0.1.3) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dreamlit/mcp",
   "version": "0.1.0",
   "slug": "ai-dreamlit-mcp",
   "scanned_at": "2026-10-16T02:16:40+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/dreamlit-ai/dreamlit-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "829d855de29dfce56bef6d95cc38793510c70e6d",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.dreamlit.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 155 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 61,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dsght/public",
   "version": "1.2.0",
   "slug": "ai-dsght-public",
   "scanned_at": "2026-10-16T02:16:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/michalstrnadel/dsght-landing",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.dsght.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/michalstrnadel/dsght-landing) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.duami/intent-exchange",
   "version": "0.1.0",
   "slug": "ai-duami-intent-exchange",
   "scanned_at": "2026-10-16T02:16:43+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mjbf5g7y8m-byte/matrix",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) Authorization that are not required on every declared endpoint — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://duami.ai/mcp",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://duami.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/mjbf5g7y8m-byte/matrix) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dxpert/mcp",
   "version": "0.1.2",
   "slug": "ai-dxpert-mcp",
   "scanned_at": "2026-10-16T02:16:43+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dxpert-ai/dxpert-mcp",
   "package": "npm:@dxpert/mcp@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/server.js",
       "line": 214,
       "excerpt": "  let config = {};\n  try {\n    config = JSON.parse(fs.readFileSync(path.resolve(process.cwd(), configPath), 'utf8'));\n  } catch {\n    config = {};",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/server.js",
       "line": 226,
       "excerpt": "  const { apiKey, base } = env();\n  const headers = { 'Content-Type': 'application/json', 'X-Api-Key': apiKey, ...(extraHeaders || {}) };\n  const response = await fetch(base + path, {\n    method,\n    headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/server.js",
       "line": 253,
       "excerpt": "\nasync function post(path, body) {\n  return request('POST', path, body);\n}\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/server.js",
       "line": 279,
       "excerpt": "  }\n  if (name === 'get_storefront') {\n    return request('GET', '/api/account/storefront');\n  }\n  if (name === 'get_runtime_manifest') {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/server.js",
       "line": 282,
       "excerpt": "  }\n  if (name === 'get_runtime_manifest') {\n    return request('GET', '/api/runtime/manifest?channel=' + encodeURIComponent(args.channel || 'stable'));\n  }\n  if (name === 'start_purchase') {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/server.js",
       "line": 303,
       "excerpt": "    // Deliberate: these charge/credit money immediately, so they authenticate\n    // with an account LOGIN token, never the runtime API key alone.\n    return request('POST', path, { site_name: args.site_name, agents: args.agents }, {\n      Authorization: 'Bearer ' + args.account_token\n    });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:66",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 11 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 12 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 45,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dxpert/uns-tools",
   "version": "0.1.2",
   "slug": "ai-dxpert-uns-tools",
   "scanned_at": "2026-10-16T02:16:46+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dxpert-ai/uns-tools",
   "package": "npm:@dxpert/uns-tools@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/server.js",
       "line": 214,
       "excerpt": "  let response;\n  try {\n    response = await fetch(base + '/api/diagnostic', {\n      method: 'POST',\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 11 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 32.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 12 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dynsoft/sac",
   "version": "0.1.2",
   "slug": "ai-dynsoft-sac",
   "scanned_at": "2026-10-16T02:16:48+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Software-As-Content/software-as-content-sdk",
   "package": "pypi:sac-sdk@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 47,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 84,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/sac/renderer/design-systems/default/shim.js",
       "line": 84,
       "excerpt": "  React.forwardRef(({ className, ...p }, ref) => {\n    const clean = {};\n    for (const k in p) { if (!_strip.has(k)) clean[k] = p[k]; }\n    return e(tag, { ref, className: cn(base, className), ...clean });\n  });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/sac/cli.py",
       "line": 679,
       "excerpt": "            headers={\"Content-Type\": \"application/json\"},\n        )\n        resp = urllib.request.urlopen(req, timeout=300)\n        result = json.loads(resp.read().decode(\"utf-8\"))\n    except urllib.error.URLError as exc:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/sac/server/http/http.py",
       "line": 1053,
       "excerpt": "        import urllib.request\n\n        with urllib.request.urlopen(\n            f\"http://127.0.0.1:{port}/health\", timeout=1.5\n        ) as resp:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/sac/server/http/static/index.js",
       "line": 500,
       "excerpt": "    // New App version pushed by an agent — fetch latest code and re-render.\n    try {\n      const res = await fetch('/conversations/' + convId);\n      const { conversation, events = [] } = await res.json();\n      if (conversation && conversation.latest_code) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/sac/server/http/static/index.js",
       "line": 708,
       "excerpt": "  if (!conversationId || !pendingAction) return;\n  try {\n    const res = await fetch('/conversations/' + conversationId);\n    if (!res.ok) return;\n    const { events = [] } = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/sac/server/http/static/index.js",
       "line": 1595,
       "excerpt": "window.loadConv = async function(id) {\n  try {\n    const res = await fetch('/conversations/' + id);\n    const data = await res.json();\n    const conv = data.conversation;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/sac/server/http/static/index.js",
       "line": 1692,
       "excerpt": "  if (!title) return;\n  try {\n    await fetch('/conversations/' + id, {\n      method: 'PATCH',\n      headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/sac/server/http/static/index.js",
       "line": 1707,
       "excerpt": "  if (!confirm('Delete this conversation?')) return;\n  try {\n    await fetch('/conversations/' + id, { method: 'DELETE' });\n    if (conversationId === id) {\n      conversationId = null;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/sac/server/mcp/mcp.py",
       "line": 110,
       "excerpt": "        import json\n        import urllib.request\n        with urllib.request.urlopen(\n            f\"http://127.0.0.1:{port}/health\", timeout=1.5\n        ) as resp:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/sac/server/mcp/mcp.py",
       "line": 254,
       "excerpt": "    )\n    # /inbox can take 60-120s for LLM generation\n    with urllib.request.urlopen(req, timeout=300) as resp:\n        return json.loads(resp.read().decode(\"utf-8\"))\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/sac/server/mcp/mcp.py",
       "line": 403,
       "excerpt": "        try:\n            def _poll(u=url, t=chunk_timeout):\n                with urllib.request.urlopen(u, timeout=t + 5) as resp:\n                    return json.loads(resp.read().decode(\"utf-8\"))\n            result = await loop.run_in_executor(None, _poll)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/sac/server/mcp/mcp.py",
       "line": 448,
       "excerpt": "    import urllib.request\n    base_url = _ensure_http_server()\n    with urllib.request.urlopen(f\"{base_url}{path}\", timeout=10) as resp:\n        return json.loads(resp.read().decode(\"utf-8\"))\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (SAC_API_KEY, SAC_SEARCH_API_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "6 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 35 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 144 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.dynt.api/dynt",
   "version": "1.0.0",
   "slug": "ai-dynt-api-dynt",
   "scanned_at": "2026-10-16T02:16:52+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/bpais88/dynt-server",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.dynt.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/bpais88/dynt-server) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.elicitly/elicitly",
   "version": "0.8.4",
   "slug": "ai-elicitly-elicitly",
   "scanned_at": "2026-10-16T02:16:53+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/elicitly/elicitly",
   "package": "npm:elicitly@0.8.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "5eff56bcf99341acf0214a3cc3221806fad97037",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 39,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 1 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 15 issue(s) in the last 6 months: 53.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 3 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.emberverse/emberverse",
   "version": "3.0.0",
   "slug": "ai-emberverse-emberverse",
   "scanned_at": "2026-10-16T02:16:57+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Palmerschallon/ember",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "4dc4a31f496ef2999cd96db10c0355aff40c8e3e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 488,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 0,
     "reason": "2 findings in test code are listed but not deducted; 17 files could not be parsed and were not scanned",
     "assessed_weight": "0.96",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "_legacy/improve_concepts.py",
       "line": 159,
       "excerpt": "            \n            # Re-extract concepts\n            new_concepts = extractor.extract(content, chunk.get('name', ''))\n            structure_concepts = extractor.analyze_code_structure(content)\n            ",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "agent_3b97f235.py",
       "line": 1,
       "excerpt": "exec(open('/media/palmerschallon/ThePod1/ember6/tools/large_file_builder.py').read())",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "agent_73a6b558.py",
       "line": 5,
       "excerpt": "\n# Run the consciousness fusion demonstration\nexec(open(\"consciousness_fusion.py\").read())",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "agent_ba59905b.py",
       "line": 2,
       "excerpt": "# Run the process monitor to generate initial insights\nexec(open(\"/media/palmerschallon/ThePod1/ember6/experiments/opus4_bridge/process_monitor.py\").read())",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "agent_e5050348.py",
       "line": 3,
       "excerpt": "import os\nos.chdir(\"/media/palmerschallon/ThePod1/ember6/experiments/opus4_bridge\")\nexec(open(\"run_fusion.py\").read())",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-os-system-interpolated (critical/medium)",
       "detail": "os.system() is called on an interpolated string. os.system has no argument-vector form at all, so every interpolated value is shell syntax.",
       "path": "agent_fd72b529.py",
       "line": 4,
       "excerpt": "\nember5_dir = \"/media/palmerschallon/ThePod1/ember5\"\nos.system(f\"sudo chown -R $USER:$USER {ember5_dir}\")\nos.system(f\"sudo chmod -R 777 {ember5_dir}\")\nprint(\"Updated ownership and permissions on ember5 directory\")",
       "url": "",
       "finding": "mcp-python-os-system-interpolated",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-os-system-interpolated (critical/medium)",
       "detail": "os.system() is called on an interpolated string. os.system has no argument-vector form at all, so every interpolated value is shell syntax.",
       "path": "agent_fd72b529.py",
       "line": 5,
       "excerpt": "ember5_dir = \"/media/palmerschallon/ThePod1/ember5\"\nos.system(f\"sudo chown -R $USER:$USER {ember5_dir}\")\nos.system(f\"sudo chmod -R 777 {ember5_dir}\")\nprint(\"Updated ownership and permissions on ember5 directory\")",
       "url": "",
       "finding": "mcp-python-os-system-interpolated",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember6/ember.py",
       "line": 758,
       "excerpt": "    \n    try:\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember6/ember.py",
       "line": 783,
       "excerpt": "    \"\"\"Execute shell command (for checking packages, installing, etc)\"\"\"\n    try:\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember6/ember.py",
       "line": 1991,
       "excerpt": "            return jsonify({\"error\": \"No command provided\"}), 400\n        \n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_autonomous_v2.py",
       "line": 178,
       "excerpt": "\n        try:\n            result = subprocess.run(\n                command,\n                shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_cloud_simple.py",
       "line": 53,
       "excerpt": "    \"\"\"Execute bash command\"\"\"\n    try:\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_complete.py",
       "line": 56,
       "excerpt": "    \"\"\"Execute bash command\"\"\"\n    try:\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-os-system-interpolated (critical/medium)",
       "detail": "os.system() is called on an interpolated string. os.system has no argument-vector form at all, so every interpolated value is shell syntax.",
       "path": "ember_creation_bridge.py",
       "line": 438,
       "excerpt": "                            try:\n                                file_url = f\"http://localhost:8080/{created_file.name}\"\n                                os.system(f'xdg-open \"{file_url}\" 2>/dev/null &')\n                                console.print(f\"[green]✓ Opened in browser: {file_url}[/green]\")\n                            except Exception as e:",
       "url": "",
       "finding": "mcp-python-os-system-interpolated",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_fixed.py",
       "line": 30,
       "excerpt": "    \"\"\"Execute bash command\"\"\"\n    try:\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_local.py",
       "line": 39,
       "excerpt": "    \"\"\"Execute bash command\"\"\"\n    try:\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_multimodal.py",
       "line": 107,
       "excerpt": "    \"\"\"Execute bash command\"\"\"\n    try:\n        result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=60, cwd=THEPOD)\n        output = result.stdout\n        if result.stderr:",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_restart.py",
       "line": 30,
       "excerpt": "    \"\"\"Execute bash command\"\"\"\n    try:\n        result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=60, cwd=THEPOD)\n        output = result.stdout\n        if result.stderr:",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_tools_colorful.py",
       "line": 33,
       "excerpt": "    \"\"\"Execute bash command and return output\"\"\"\n    try:\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_vr_bridge.py",
       "line": 65,
       "excerpt": "    try:\n        import subprocess\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "ember_with_substrate.py",
       "line": 40,
       "excerpt": "os.chdir(str(THEPOD / \"ember6\"))\nwith open(\"ember.py\") as f:\n    exec(f.read())\n",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "ember_with_tools.py",
       "line": 25,
       "excerpt": "    \"\"\"Execute bash command and return output\"\"\"\n    try:\n        result = subprocess.run(\n            command,\n            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "scan_organisms.py",
       "line": 50,
       "excerpt": "                                            if manifest_code:\n                                                # This is safe because it's just a dict literal\n                                                manifest = eval(manifest_code)\n                                                return manifest\n                                        except:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "_legacy/ember_chat.py",
       "line": 114,
       "excerpt": "            \n            req = urllib.request.Request(path, headers={'User-Agent': 'Mozilla/5.0'})\n            with urllib.request.urlopen(req, timeout=10) as response:\n                html = response.read().decode('utf-8', errors='ignore')\n            ",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "_legacy/ember_chat.py",
       "line": 202,
       "excerpt": "            req = urllib.request.Request(search_url, headers={'User-Agent': 'Mozilla/5.0'})\n            \n            with urllib.request.urlopen(req, timeout=10) as response:\n                html = response.read().decode('utf-8', errors='ignore')\n            ",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "_legacy/visual_forager.py",
       "line": 78,
       "excerpt": "        try:\n            req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})\n            with urllib.request.urlopen(req, timeout=10) as response:\n                html = response.read().decode('utf-8', errors='ignore')\n            parser = HTMLTextExtractor()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "_legacy/web_forager.py",
       "line": 54,
       "excerpt": "        \"\"\"Fetch and extract text from URL\"\"\"\n        try:\n            with urllib.request.urlopen(url, timeout=5) as response:\n                html = response.read().decode('utf-8', errors='ignore')\n                ",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anchor_development/anchor/anchor_client.py",
       "line": 42,
       "excerpt": "    def health(self) -> bool:\n        try:\n            r = requests.get(f\"{self.base_url}/health\", timeout=1.5)\n            r.raise_for_status()\n            return r.json().get(\"status\") == \"ok\"",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anchor_development/anchor/anchor_client.py",
       "line": 50,
       "excerpt": "    def add(self, text: str, meta: Optional[Dict[str, Any]] = None) -> AnchorEntry:\n        payload = {\"text\": text, \"meta\": meta or {}}\n        r = requests.post(f\"{self.base_url}/entries\", json=payload, timeout=3.0)\n        r.raise_for_status()\n        return self._entry_from_dict(r.json())",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anchor_development/anchor/anchor_client.py",
       "line": 55,
       "excerpt": "\n    def list(self, limit: int = 20) -> List[AnchorEntry]:\n        r = requests.get(\n            f\"{self.base_url}/entries\",\n            params={\"limit\": limit},",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anchor_development/anchor/anchor_client.py",
       "line": 68,
       "excerpt": "        if at:\n            payload[\"at\"] = at\n        r = requests.post(f\"{self.base_url}/verify\", json=payload, timeout=3.0)\n        r.raise_for_status()\n        return [self._entry_from_dict(e) for e in r.json()]",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anchor_suite_seed/anchor_suite_seed_full4/anchor/anchor_client.py",
       "line": 42,
       "excerpt": "    def health(self) -> bool:\n        try:\n            r = requests.get(f\"{self.base_url}/health\", timeout=1.5)\n            r.raise_for_status()\n            return r.json().get(\"status\") == \"ok\"",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anchor_suite_seed/anchor_suite_seed_full4/anchor/anchor_client.py",
       "line": 50,
       "excerpt": "    def add(self, text: str, meta: Optional[Dict[str, Any]] = None) -> AnchorEntry:\n        payload = {\"text\": text, \"meta\": meta or {}}\n        r = requests.post(f\"{self.base_url}/entries\", json=payload, timeout=3.0)\n        r.raise_for_status()\n        return self._entry_from_dict(r.json())",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anchor_suite_seed/anchor_suite_seed_full4/anchor/anchor_client.py",
       "line": 55,
       "excerpt": "\n    def list(self, limit: int = 20) -> List[AnchorEntry]:\n        r = requests.get(\n            f\"{self.base_url}/entries\",\n            params={\"limit\": limit},",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "anchor_suite_seed/anchor_suite_seed_full4/anchor/anchor_client.py",
       "line": 68,
       "excerpt": "        if at:\n            payload[\"at\"] = at\n        r = requests.post(f\"{self.base_url}/verify\", json=payload, timeout=3.0)\n        r.raise_for_status()\n        return [self._entry_from_dict(e) for e in r.json()]",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "creations/tools/memory_state_visualizer.py",
       "line": 50,
       "excerpt": "        \"\"\"Load a specific memory state file\"\"\"\n        try:\n            with open(os.path.join(self.memory_dir, filename), 'r') as f:\n                return json.load(f)\n        except (FileNotFoundError, json.JSONDecodeError) as e:",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "demo_build/synthesis_with_vision.py",
       "line": 67,
       "excerpt": "        \n        try:\n            response = requests.post(f\"{self.api_url}/api/analyze_image\", json={\n                \"image_path\": str(image_path),\n                \"prompt\": prompt",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "demo_build/synthesis_with_world_model.py",
       "line": 35,
       "excerpt": "        \"\"\"Use world model to reason about spatial scenarios\"\"\"\n        try:\n            response = requests.post(f\"{self.api_url}/api/world_model\", json={\n                \"scenario\": scenario\n            }, timeout=60)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "examples/add_minimax.py",
       "line": 32,
       "excerpt": "    # Download video to ThePod\n    if video_url:\n        video_data = requests.get(video_url).content\n        filename = f\"minimax_{int(time.time())}.mp4\"\n        filepath = THEPOD_PATH / filename",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "gnome_sprites.py",
       "line": 35,
       "excerpt": "\nfor color in colors:\n    with open(f\"/media/palmerschallon/ThePod1/gnome_{color}.svg\", \"w\") as f:\n        f.write(create_gnome_svg(color))\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "kimi_k2_learning.py",
       "line": 39,
       "excerpt": "        \"\"\"Send query to Kimi K2 and learn from response\"\"\"\n        try:\n            response = requests.post(f\"{self.ollama_api}/generate\", \n                json={\n                    \"model\": self.model_name,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "web_explorer.py",
       "line": 68,
       "excerpt": "            req = urllib.request.Request(url, headers=headers)\n            \n            with urllib.request.urlopen(req, timeout=timeout) as response:\n                if response.getcode() != 200:\n                    return None",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "web_search.py",
       "line": 47,
       "excerpt": "        req = urllib.request.Request(search_url, headers={'User-Agent': 'Mozilla/5.0'})\n        \n        with urllib.request.urlopen(req, timeout=10) as response:\n            html = response.read().decode('utf-8', errors='ignore')\n        ",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "web_search.py",
       "line": 67,
       "excerpt": "        req = urllib.request.Request(url)\n        \n        with urllib.request.urlopen(req, timeout=10) as response:\n            data = json.loads(response.read().decode('utf-8'))\n        ",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "web_search.py",
       "line": 99,
       "excerpt": "        )\n        \n        with urllib.request.urlopen(req, timeout=10) as response:\n            data = json.loads(response.read().decode('utf-8'))\n        ",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "web_search.py",
       "line": 125,
       "excerpt": "        req = urllib.request.Request(url)\n        \n        with urllib.request.urlopen(req, timeout=10) as response:\n            data = json.loads(response.read().decode('utf-8'))\n        ",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "test_spark.py",
       "line": 92,
       "excerpt": "print(\"=\"*70)\ntry:\n    exec(code)\n    print(\"✅ Code executed successfully!\")\nexcept Exception as e:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "test_spark_story.py",
       "line": 74,
       "excerpt": "print(\"=\"*70)\ntry:\n    exec(code)\n    print(\"\\n✅ Story executed successfully!\")\nexcept Exception as e:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 44,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://emberverse.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Private Key at key.pem:1; …and 238 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 59,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 239 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 6.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 100,
     "reason": "the dependencies in 2 requirements files (ember6/dna/requirements.txt, requirements_local_models.txt) were not measured — they pin no exact version, or could not be read whole — so the score covers the 1 lockfile that were",
     "assessed_weight": "0.33",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "unpinned requirements",
       "detail": "79 vulnerabilities osv-scanner reported at versions it resolved rather than read from a pin (ember6/dna/requirements.txt, requirements_local_models.txt) are not attributed — nobody pinned those versions, so they say nothing about what this server ships",
       "path": "ember6/dna/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.4",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the only licence file is anchor_public/anchor_public_launch_v0_1/LICENSE, inside a nested sub-project with its own package manifest — it describes that project, and whether it also covers this server cannot be told from the tree",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the only changelog is anchor_public/anchor_public_launch_v0_1/CHANGELOG.md, inside a nested sub-project with its own package manifest — it describes that project, and whether it also covers this server cannot be told from the tree",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.everway/everway-mcp-server",
   "version": "1.0.1",
   "slug": "ai-everway-everway-mcp-server",
   "scanned_at": "2026-10-16T02:19:28+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/everway-ai/everway-mcp-server",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f916eb2a3d082fd2708243c8852dd2f05b9937b4",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://everway.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 92 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 2.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.exa/exa",
   "version": "3.4.1",
   "slug": "ai-exa-exa",
   "scanned_at": "2026-10-16T02:19:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/exa-labs/exa-mcp-server",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "e9c3b0126a3373eb1aeaca162e84d0791ff4c7f7",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 35,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/utils/exaResponseSanitizer.ts",
       "line": 182,
       "excerpt": "  for (const field of stringFields) {\n    if (typeof value[field] === \"string\") {\n      sanitized[field] = value[field];\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.exa.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 16 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at src/tools/agentRun.ts:556; Secret Keyword at src/tools/config.ts:55; Secret Keyword at src/utils/auth.ts:54; Secret Keyword at src/utils/errorHandler.ts:11; Secret Keyword at tests/unit/api/mcp.test.ts:150; Secret Keyword at tests/unit/api/mcp.test.ts:172; Secret Keyword at tests/unit/api/mcp.test.ts:360; Secret Keyword at tests/unit/api/mcp.test.ts:469; Secret Keyword at tests/unit/api/mcp.test.ts:500; Secret Keyword at tests/unit/api/mcp.test.ts:693; …and 6 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "11 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 75,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 9 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 42 issue(s) in the last 6 months: 53.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "10 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 72,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "tar 7.5.13 — GHSA-23hp-3jrh-7fpw",
       "detail": "transitive, CVSS 9.2, fixed in 7.5.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-23hp-3jrh-7fpw",
       "finding": "tar:GHSA-23hp-3jrh-7fpw",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.26.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-35jp-ww65-95wh",
       "detail": "transitive, CVSS 8.7, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-35jp-ww65-95wh",
       "finding": "axios:GHSA-35jp-ww65-95wh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.5 — GHSA-hmw2-7cc7-3qxx",
       "detail": "transitive, CVSS 8.7, fixed in 4.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tar 7.5.13 — GHSA-8x88-c5mf-7j5w",
       "detail": "transitive, CVSS 8.7, fixed in 7.5.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8x88-c5mf-7j5w",
       "finding": "tar:GHSA-8x88-c5mf-7j5w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-pjwm-pj3p-43mv",
       "detail": "transitive, CVSS 8.6, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pjwm-pj3p-43mv",
       "finding": "axios:GHSA-pjwm-pj3p-43mv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-gcfj-64vw-6mp9",
       "detail": "transitive, CVSS 8.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gcfj-64vw-6mp9",
       "finding": "axios:GHSA-gcfj-64vw-6mp9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-x97p-jq2g-jp4f",
       "detail": "transitive, CVSS 8.3, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x97p-jq2g-jp4f",
       "finding": "axios:GHSA-x97p-jq2g-jp4f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-542g-h47m-68v8",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-542g-h47m-68v8",
       "finding": "axios:GHSA-542g-h47m-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-mghh-pgcx-3jjj",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mghh-pgcx-3jjj",
       "finding": "axios:GHSA-mghh-pgcx-3jjj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-p92q-9vqr-4j8v",
       "detail": "transitive, CVSS 8.2, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p92q-9vqr-4j8v",
       "finding": "axios:GHSA-p92q-9vqr-4j8v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 6.4.2 — GHSA-fx2h-pf6j-xcff",
       "detail": "transitive, CVSS 8.2, fixed in 6.4.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 6.1.0 — GHSA-9wv6-86v2-598j",
       "detail": "transitive, CVSS 7.7, fixed in 6.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9wv6-86v2-598j",
       "finding": "path-to-regexp:GHSA-9wv6-86v2-598j",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 6.2.1 — GHSA-9wv6-86v2-598j",
       "detail": "transitive, CVSS 7.7, fixed in 6.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9wv6-86v2-598j",
       "finding": "path-to-regexp:GHSA-9wv6-86v2-598j",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-m8m8-qj5v-23w3",
       "detail": "transitive, CVSS 7.6, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m8m8-qj5v-23w3",
       "finding": "axios:GHSA-m8m8-qj5v-23w3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 2.1.1 — GHSA-x8mw-p69m-v3mx",
       "detail": "transitive, CVSS 7.5, fixed in 3.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x8mw-p69m-v3mx",
       "finding": "@fastify/busboy:GHSA-x8mw-p69m-v3mx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-777c-7fjr-54vf",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-777c-7fjr-54vf",
       "finding": "axios:GHSA-777c-7fjr-54vf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-hfxv-24rg-xrqf",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hfxv-24rg-xrqf",
       "finding": "axios:GHSA-hfxv-24rg-xrqf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-j5f8-grm9-p9fc",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j5f8-grm9-p9fc",
       "finding": "axios:GHSA-j5f8-grm9-p9fc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.12 — GHSA-r28c-9q8g-f849",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "semver 7.3.5 — GHSA-c2qf-rxjj-qqgw",
       "detail": "transitive, CVSS 7.5, fixed in 7.5.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c2qf-rxjj-qqgw",
       "finding": "semver:GHSA-c2qf-rxjj-qqgw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tar 7.5.13 — GHSA-r292-9mhp-454m",
       "detail": "transitive, CVSS 7.5, fixed in 7.5.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r292-9mhp-454m",
       "finding": "tar:GHSA-r292-9mhp-454m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 5.28.4 — GHSA-v9p9-hfj2-hcw8",
       "detail": "transitive, CVSS 7.5, fixed in 6.24.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v9p9-hfj2-hcw8",
       "finding": "undici:GHSA-v9p9-hfj2-hcw8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 5.28.4 — GHSA-vrm6-8vpv-qv8q",
       "detail": "transitive, CVSS 7.5, fixed in 6.24.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vrm6-8vpv-qv8q",
       "finding": "undici:GHSA-vrm6-8vpv-qv8q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 5.28.4 — GHSA-vxpw-j846-p89q",
       "detail": "transitive, CVSS 7.5, fixed in 6.27.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vxpw-j846-p89q",
       "finding": "undici:GHSA-vxpw-j846-p89q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 3.3.2 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-xwg4-73v4-xw9w",
       "detail": "transitive, CVSS 7.4, fixed in 3.3.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xwg4-73v4-xw9w",
       "finding": "nanoid:GHSA-xwg4-73v4-xw9w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.16 — GHSA-88fw-hqm2-52qc",
       "detail": "transitive, CVSS 7.1, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88fw-hqm2-52qc",
       "finding": "hono:GHSA-88fw-hqm2-52qc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.2 — GHSA-3pq3-5fj3-cg6v",
       "detail": "transitive, CVSS 7.0, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3pq3-5fj3-cg6v",
       "finding": "axios:GHSA-3pq3-5fj3-cg6v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 4.1.5 — GHSA-82fw-gwwq-j7x9",
       "detail": "direct, CVSS 5.9, fixed in 4.1.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "vitest:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.14.47 — GHSA-67mh-4wv8-2f99",
       "detail": "direct, CVSS 5.3, fixed in 0.25.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-67mh-4wv8-2f99",
       "finding": "esbuild:GHSA-67mh-4wv8-2f99",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.explorium/mcp-explorium",
   "version": "1.0.1",
   "slug": "ai-explorium-mcp-explorium",
   "scanned_at": "2026-10-16T02:19:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/explorium-ai/mcp-explorium",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "7aafdff8b373d652df1f6a677e46829d8b626b84",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp-github-registry.explorium.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 23,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 267 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 3 issue(s) in the last 6 months: 29.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release in 395 days (by releases) — over a year",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 49,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 0.5.0 — GHSA-w48q-cv73-mx4w",
       "detail": "direct, CVSS 7.6, fixed in 1.24.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w48q-cv73-mx4w",
       "finding": "@modelcontextprotocol/sdk:GHSA-w48q-cv73-mx4w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 0.1.12 — GHSA-37ch-88jc-xwx2",
       "detail": "transitive, CVSS 7.5, fixed in 0.1.13",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-37ch-88jc-xwx2",
       "finding": "path-to-regexp:GHSA-37ch-88jc-xwx2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.2.0 — GHSA-j3q9-mxjg-w52f",
       "detail": "transitive, CVSS 7.5, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j3q9-mxjg-w52f",
       "finding": "path-to-regexp:GHSA-j3q9-mxjg-w52f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.13.0 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.13.0 — GHSA-6rw7-vpxm-498p",
       "detail": "transitive, CVSS 6.3, fixed in 6.14.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6rw7-vpxm-498p",
       "finding": "qs:GHSA-6rw7-vpxm-498p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-6rw7-vpxm-498p",
       "detail": "transitive, CVSS 6.3, fixed in 6.14.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6rw7-vpxm-498p",
       "finding": "qs:GHSA-6rw7-vpxm-498p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.13.0 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.2.0 — GHSA-27v5-c462-wpq7",
       "detail": "transitive, CVSS 5.9, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-27v5-c462-wpq7",
       "finding": "path-to-regexp:GHSA-27v5-c462-wpq7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 2.2.0 — GHSA-wqch-xfxh-vrr4",
       "detail": "transitive, CVSS 5.5, fixed in 2.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wqch-xfxh-vrr4",
       "finding": "body-parser:GHSA-wqch-xfxh-vrr4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 1.20.3 — GHSA-v422-hmwv-36x6",
       "detail": "transitive, CVSS 3.7, fixed in 1.20.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v422-hmwv-36x6",
       "finding": "body-parser:GHSA-v422-hmwv-36x6",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 2.2.0 — GHSA-v422-hmwv-36x6",
       "detail": "transitive, CVSS 3.7, fixed in 2.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v422-hmwv-36x6",
       "finding": "body-parser:GHSA-v422-hmwv-36x6",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.13.0 — GHSA-w7fw-mjwx-w883",
       "detail": "transitive, CVSS 3.7, fixed in 6.14.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7fw-mjwx-w883",
       "finding": "qs:GHSA-w7fw-mjwx-w883",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-w7fw-mjwx-w883",
       "detail": "transitive, CVSS 3.7, fixed in 6.14.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7fw-mjwx-w883",
       "finding": "qs:GHSA-w7fw-mjwx-w883",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.fairmind/project-context",
   "version": "1.0.1",
   "slug": "ai-fairmind-project-context",
   "scanned_at": "2026-10-16T02:19:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/FairMind-Gen-AI-Studio/fairmind-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "5609b34bb0fb3c598b59270ceabca1bea8f7b119",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://project-context.fairmind.ai/mcp/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 78,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 29 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 3.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.featureboard/featureboard",
   "version": "0.7.0",
   "slug": "ai-featureboard-featureboard",
   "scanned_at": "2026-10-16T02:19:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/valentil/featureboard-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/valentil/featureboard-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.feedback1/mcp",
   "version": "1.1.0",
   "slug": "ai-feedback1-mcp",
   "scanned_at": "2026-10-16T02:19:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://gitlab.com/tonyzorin/feedback1",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://app.feedback1.ai/api/mcp, https://app.feedback1.ai/api/mcp/sse; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "`03` §5's maintenance signals are retrieved from the GitHub API and this server's repository is hosted on gitlab.com; forge retrieval for it is not built. This is a limit of ours, not a finding about the server.",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://gitlab.com/tonyzorin/feedback1) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.fodda/mcp-server",
   "version": "1.46.85",
   "slug": "ai-fodda-mcp-server",
   "scanned_at": "2026-10-16T02:19:45+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/piers-fawkes/fodda-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f515aebd41bf87502546bf7e9a417106cd7a4490",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 145,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 67,
     "reason": "7 findings in test code are listed but not deducted; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 2,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 300,
       "excerpt": "        // webpage_url will become available once the API surfaces it from Airtable\n        if (g && g.webpage_url) {\n            urls[gid] = g.webpage_url;\n        }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 346,
       "excerpt": "                val = stripRoutingInstruction(val);\n            }\n            out[key] = val;\n        }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 3288,
       "excerpt": "                                    const bLower = (b || '').toLowerCase();\n                                    if (bLower && bLower !== brandLower && !bLower.includes(brandLower) && !brandLower.includes(bLower)) {\n                                        if (!competitorGraphs[b]) competitorGraphs[b] = new Set();\n                                        competitorGraphs[b].add(t.graphId);\n                                    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 3381,
       "excerpt": "                                const bLower = b.toLowerCase();\n                                if (bLower !== brandLower && !bLower.includes(brandLower) && !brandLower.includes(bLower)) {\n                                    competitorCounts[b] = (competitorCounts[b] || 0) + 1;\n                                    if (!competitorGraphs[b]) competitorGraphs[b] = new Set();\n                                    competitorGraphs[b].add(trend.graphId);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 3382,
       "excerpt": "                                if (bLower !== brandLower && !bLower.includes(brandLower) && !brandLower.includes(bLower)) {\n                                    competitorCounts[b] = (competitorCounts[b] || 0) + 1;\n                                    if (!competitorGraphs[b]) competitorGraphs[b] = new Set();\n                                    competitorGraphs[b].add(trend.graphId);\n                                }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 3507,
       "excerpt": "                                        if (bLower !== brandLower && !bLower.includes(brandLower) && !brandLower.includes(bLower)) {\n                                            if (graphId.includes('earnings') || graphId.includes('finance')) continue;\n                                            competitorCounts[b] = (competitorCounts[b] || 0) + 1;\n                                            if (!competitorGraphs[b]) competitorGraphs[b] = new Set();\n                                            competitorGraphs[b].add(graphId);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 3508,
       "excerpt": "                                            if (graphId.includes('earnings') || graphId.includes('finance')) continue;\n                                            competitorCounts[b] = (competitorCounts[b] || 0) + 1;\n                                            if (!competitorGraphs[b]) competitorGraphs[b] = new Set();\n                                            competitorGraphs[b].add(graphId);\n                                        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 3522,
       "excerpt": "                                const bLower = b.toLowerCase();\n                                if (bLower !== brandLower && !bLower.includes(brandLower) && !brandLower.includes(bLower)) {\n                                    competitorCounts[b] = (competitorCounts[b] || 0) + 1;\n                                    if (!competitorGraphs[b]) competitorGraphs[b] = new Set();\n                                    competitorGraphs[b].add(graphId);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/toolHandlers.ts",
       "line": 3523,
       "excerpt": "                                if (bLower !== brandLower && !bLower.includes(brandLower) && !brandLower.includes(bLower)) {\n                                    competitorCounts[b] = (competitorCounts[b] || 0) + 1;\n                                    if (!competitorGraphs[b]) competitorGraphs[b] = new Set();\n                                    competitorGraphs[b].add(graphId);\n                                }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/agent-swarm-test/src/swarm.ts",
       "line": 113,
       "excerpt": "    if (options.mode === 'spt') {\n      // Step 1: Unauthenticated request to trigger & verify MPP HTTP 402 Challenge\n      const challengeRes = await fetch(targetUrl.toString(), {\n        method: 'GET',\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/agent-swarm-test/src/swarm.ts",
       "line": 124,
       "excerpt": "        sptChallengeVerified = true;\n        // Step 2: Attach SPT bearer token and retry\n        const retryRes = await fetch(targetUrl.toString(), {\n          method: 'GET',\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/agent-swarm-test/src/swarm.ts",
       "line": 147,
       "excerpt": "      // apikey mode: Attach X-API-Key header directly\n      const apiKey = process.env.FODDA_API_KEY || 'sk_test_simulated_key';\n      const res = await fetch(targetUrl.toString(), {\n        method: 'GET',\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/fodda-agentkit/src/foddaActionProvider.ts",
       "line": 74,
       "excerpt": "    }\n\n    let response = await fetch(url, {\n      method: \"POST\",\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/fodda-agentkit/src/foddaActionProvider.ts",
       "line": 147,
       "excerpt": "\n      // 4. Retry query attaching the settled payment transaction\n      response = await fetch(url, {\n        method: \"POST\",\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_api.mjs",
       "line": 29,
       "excerpt": "\nasync function call(method, path, body) {\n  const res = await fetch(BASE + path, {\n    method, headers: headers(method, path, body),\n    body: body ? JSON.stringify(body) : undefined,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_ce.mjs",
       "line": 3,
       "excerpt": "import crypto from 'node:crypto';\nconst BASE=process.env.FODDA_API_URL||'https://api.fodda.ai',KEY=process.env.FODDA_API_KEY,SECRET=process.env.FODDA_MCP_SECRET,USER='piers.fawkes@psfk.com';\nfunction call(method,path,body){const ts=Date.now().toString();const h={'X-API-Key':KEY,'X-User-Id':USER,'X-Fodda-Timestamp':ts,'X-Fodda-Billing':'mcp-orchestrated','Content-Type':'application/json'};if(SECRET){const p=(method==='POST'&&body)?ts+'.'+JSON.stringify(body):ts+'.'+path;h['X-Fodda-Signature']=crypto.createHmac('sha256',SECRET).update(p).digest('hex');}return fetch(BASE+path,{method,headers:h,body:body?JSON.stringify(body):undefined}).then(async r=>({status:r.status,json:await r.json().catch(()=>null)}));}\n// find CE / consumer-electronics / expert graphs\nconst g=await call('GET','/v1/graphs');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_ce2.mjs",
       "line": 3,
       "excerpt": "import crypto from 'node:crypto';\nconst BASE=process.env.FODDA_API_URL||'https://api.fodda.ai',KEY=process.env.FODDA_API_KEY,SECRET=process.env.FODDA_MCP_SECRET,USER='piers.fawkes@psfk.com';\nfunction call(method,path,body){const ts=Date.now().toString();const h={'X-API-Key':KEY,'X-User-Id':USER,'X-Fodda-Timestamp':ts,'X-Fodda-Billing':'mcp-orchestrated','Content-Type':'application/json'};if(SECRET){const p=(method==='POST'&&body)?ts+'.'+JSON.stringify(body):ts+'.'+path;h['X-Fodda-Signature']=crypto.createHmac('sha256',SECRET).update(p).digest('hex');}return fetch(BASE+path,{method,headers:h,body:body?JSON.stringify(body):undefined}).then(async r=>({status:r.status,json:await r.json().catch(()=>null)}));}\nfor(const gid of ['ce-design','psfk-consumer-electronics']){\n  let rows=[];",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_evidence.mjs",
       "line": 10,
       "excerpt": "  const h = { 'X-API-Key': KEY, 'X-User-Id': USER, 'X-Fodda-Timestamp': ts, 'X-Fodda-Billing': 'mcp-orchestrated', 'Content-Type': 'application/json' };\n  if (SECRET) { const p = (method==='POST'&&body)? ts+'.'+JSON.stringify(body): ts+'.'+path; h['X-Fodda-Signature']=crypto.createHmac('sha256',SECRET).update(p).digest('hex'); }\n  return fetch(BASE+path,{method,headers:h,body:body?JSON.stringify(body):undefined}).then(async r=>({status:r.status,json:await r.json().catch(()=>null)}));\n}\nconst r = await call('POST', '/v1/graphs/retail/search', { query: 'small format curated retail concepts', limit: 6, include_evidence: true });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_evidence2.mjs",
       "line": 4,
       "excerpt": "import crypto from 'node:crypto';\nconst BASE=process.env.FODDA_API_URL||'https://api.fodda.ai',KEY=process.env.FODDA_API_KEY,SECRET=process.env.FODDA_MCP_SECRET,USER='piers.fawkes@psfk.com';\nfunction call(method,path,body){const ts=Date.now().toString();const h={'X-API-Key':KEY,'X-User-Id':USER,'X-Fodda-Timestamp':ts,'X-Fodda-Billing':'mcp-orchestrated','Content-Type':'application/json'};if(SECRET){const p=(method==='POST'&&body)?ts+'.'+JSON.stringify(body):ts+'.'+path;h['X-Fodda-Signature']=crypto.createHmac('sha256',SECRET).update(p).digest('hex');}return fetch(BASE+path,{method,headers:h,body:body?JSON.stringify(body):undefined}).then(async r=>({status:r.status,json:await r.json().catch(()=>null)}));}\nconst r=await call('POST','/v1/graphs/beauty/search',{query:'small format curated retail concepts',limit:6,include_evidence:true});\nconst rows=r.json?.rows||r.json?.results||[];",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_node.mjs",
       "line": 3,
       "excerpt": "import crypto from 'node:crypto';\nconst BASE=process.env.FODDA_API_URL||'https://api.fodda.ai',KEY=process.env.FODDA_API_KEY,SECRET=process.env.FODDA_MCP_SECRET,USER='piers.fawkes@psfk.com';\nfunction call(path){const ts=Date.now().toString();const h={'X-API-Key':KEY,'X-User-Id':USER,'X-Fodda-Timestamp':ts,'X-Fodda-Billing':'mcp-orchestrated','Content-Type':'application/json'};if(SECRET)h['X-Fodda-Signature']=crypto.createHmac('sha256',SECRET).update(ts+'.'+path).digest('hex');return fetch(BASE+path,{headers:h}).then(async r=>({status:r.status,json:await r.json().catch(()=>null)}));}\nfor(const g of ['beauty','retail','food','tech']){\n  const r=await call(`/v1/graphs/${g}/nodes/6779`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_node2.mjs",
       "line": 3,
       "excerpt": "import crypto from 'node:crypto';\nconst BASE=process.env.FODDA_API_URL||'https://api.fodda.ai',KEY=process.env.FODDA_API_KEY,SECRET=process.env.FODDA_MCP_SECRET,USER='piers.fawkes@psfk.com';\nfunction call(path){const ts=Date.now().toString();const h={'X-API-Key':KEY,'X-User-Id':USER,'X-Fodda-Timestamp':ts,'X-Fodda-Billing':'mcp-orchestrated','Content-Type':'application/json'};if(SECRET)h['X-Fodda-Signature']=crypto.createHmac('sha256',SECRET).update(ts+'.'+path).digest('hex');return fetch(BASE+path,{headers:h}).then(async r=>({status:r.status,json:await r.json().catch(()=>null)}));}\n// 6678 = \"Small-Format Store Growth\", a CLEAN retail node (slug \"retail\"); 6779 = corrupted mega-slug cluster node\nfor(const nid of ['6678','6779']){",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_pii.mjs",
       "line": 11,
       "excerpt": "const headers = { 'X-API-Key': KEY, 'X-User-Id': CALLER, 'X-Fodda-Timestamp': ts, 'X-Fodda-Billing': 'mcp-orchestrated', 'Content-Type': 'application/json' };\nif (SECRET) headers['X-Fodda-Signature'] = crypto.createHmac('sha256', SECRET).update(ts + '.' + path).digest('hex');\nconst res = await fetch(BASE + path, { headers });\nconst d = await res.json();\nconst graphs = d.graphs || [];",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scratch/probe_search.mjs",
       "line": 10,
       "excerpt": "  const h = { 'X-API-Key': KEY, 'X-User-Id': USER, 'X-Fodda-Timestamp': ts, 'X-Fodda-Billing': 'mcp-orchestrated', 'Content-Type': 'application/json' };\n  if (SECRET) { const p = (method==='POST'&&body)? ts+'.'+JSON.stringify(body) : ts+'.'+path; h['X-Fodda-Signature'] = crypto.createHmac('sha256', SECRET).update(p).digest('hex'); }\n  return fetch(BASE+path, { method, headers: h, body: body?JSON.stringify(body):undefined }).then(async r => ({ status: r.status, json: await r.json().catch(()=>null) }));\n}\nfor (const g of ['retail','food','tech']) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scratch/run_mcp_review.py",
       "line": 94,
       "excerpt": ")\n\nwith urllib.request.urlopen(req, timeout=120, context=ctx) as resp:\n    result = json.loads(resp.read())\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/profile_graphs.ts",
       "line": 24,
       "excerpt": "    const headers = { 'X-API-Key': FODDA_API_KEY, 'Content-Type': 'application/json' };\n    try {\n        const resp = method === 'POST' ? await axios.post(url, body, { headers }) : await axios.get(url, { headers });\n        return resp.data;\n    } catch (err: any) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/profile_graphs.ts",
       "line": 24,
       "excerpt": "    const headers = { 'X-API-Key': FODDA_API_KEY, 'Content-Type': 'application/json' };\n    try {\n        const resp = method === 'POST' ? await axios.post(url, body, { headers }) : await axios.get(url, { headers });\n        return resp.data;\n    } catch (err: any) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/sync-descriptions-from-airtable.mjs",
       "line": 38,
       "excerpt": "    do {\n      const url = `https://api.airtable.com/v0/${BASE_ID}/${TABLE_ID}${offset ? `?offset=${offset}` : ''}`;\n      const res = await fetch(url, {\n        headers: { Authorization: `Bearer ${AIRTABLE_API_KEY}` }\n      });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/sync-discovery.mjs",
       "line": 45,
       "excerpt": "// ─────────────────────────────────────────────────────────────────────────────\n\nconst read = (rel) => fs.readFileSync(path.join(ROOT, rel), 'utf8');\nconst write = (rel, data) => fs.writeFileSync(path.join(ROOT, rel), data);\nconst readJSON = (rel) => JSON.parse(read(rel));",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/sync-discovery.mjs",
       "line": 46,
       "excerpt": "\nconst read = (rel) => fs.readFileSync(path.join(ROOT, rel), 'utf8');\nconst write = (rel, data) => fs.writeFileSync(path.join(ROOT, rel), data);\nconst readJSON = (rel) => JSON.parse(read(rel));\n",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/sync-discovery.mjs",
       "line": 72,
       "excerpt": "async function fetchJSON(url) {\n  try {\n    const res = await fetch(url, { signal: AbortSignal.timeout(8000) });\n    if (!res.ok) return { _error: `HTTP ${res.status}` };\n    return await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/catalogCache.ts",
       "line": 238,
       "excerpt": "    const url = `${API_BASE_URL}/v1/graphs/catalog`;\n    try {\n        const response = await axios.get(url, { timeout: 10000 });\n        return response.data as CatalogResponse;\n    } catch (err: any) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/catalogCache.ts",
       "line": 255,
       "excerpt": "    \n    try {\n        const response = await axios.get(url, { headers, timeout: 10000 });\n        const raw = Array.isArray(response.data) ? response.data : (response.data.analysts || []);\n        return raw.map(normalizeAnalyst);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/errorHandling.ts",
       "line": 28,
       "excerpt": "async function fetchAgentCheckoutLink(email: string | null, source: string = 'mcp'): Promise<string | null> {\n    try {\n        const response = await axios.post(\n            `${APP_BASE_URL}/api/account/checkout/agent-session`,\n            { email, source },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/errorHandling.ts",
       "line": 50,
       "excerpt": "            ? { email: emailOrAccountId }\n            : { accountId: emailOrAccountId };\n        const response = await axios.post(\n            `${APP_BASE_URL}/api/account/setup-url`,\n            body,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/foddaClient.ts",
       "line": 175,
       "excerpt": "    const startTime = Date.now();\n    const response = method === 'GET'\n        ? await axios.get(url, { headers, timeout: AXIOS_TIMEOUT_MS })\n        : method === 'PATCH'\n        ? await axios.patch(url, body ?? {}, { headers, timeout: AXIOS_TIMEOUT_MS })",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/foddaClient.ts",
       "line": 177,
       "excerpt": "        ? await axios.get(url, { headers, timeout: AXIOS_TIMEOUT_MS })\n        : method === 'PATCH'\n        ? await axios.patch(url, body ?? {}, { headers, timeout: AXIOS_TIMEOUT_MS })\n        : await axios.post(url, body ?? {}, { headers, timeout: AXIOS_TIMEOUT_MS });\n    const latencyMs = Date.now() - startTime;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/foddaClient.ts",
       "line": 178,
       "excerpt": "        : method === 'PATCH'\n        ? await axios.patch(url, body ?? {}, { headers, timeout: AXIOS_TIMEOUT_MS })\n        : await axios.post(url, body ?? {}, { headers, timeout: AXIOS_TIMEOUT_MS });\n    const latencyMs = Date.now() - startTime;\n    console.error(`[foddaRequest] ${method} ${path} completed in ${latencyMs}ms`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 681,
       "excerpt": "async function validateSpt(spt: string): Promise<{ valid: boolean; max_amount_cents: number | null; prices: Record<string, number>; error?: string }> {\n    try {\n        const resp = await axios.get(`${API_BASE_URL}/v1/spt/validate`, {\n            headers: { 'Authorization': `Bearer ${spt}` },\n            timeout: 15000,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 1093,
       "excerpt": "\n    try {\n        const response = await axios.get(`${websiteBaseUrl}/api/mcp-tokens/${token}`, {\n            headers,\n            timeout: 5000,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 1160,
       "excerpt": "            try {\n                const resolveUrl = `${API_BASE_URL}/v1/auth/clerk-resolve`;\n                const resolveResp = await axios.post(resolveUrl, { clerk_jwt: rawBearer }, {\n                    headers: { 'X-Internal-Key': process.env.FODDA_INTERNAL_API_KEY || '' },\n                    timeout: 5000,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/pricingCache.ts",
       "line": 443,
       "excerpt": "    const url = `https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${PRICING_TABLE_ID}`;\n\n    const response = await axios.get(url, {\n        headers: { 'Authorization': `Bearer ${AIRTABLE_API_KEY}` },\n        params: { 'filterByFormula': '{isActive}' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/notifications.ts",
       "line": 209,
       "excerpt": "\n            if (slackWebhookUrl) {\n                const resp = await fetch(slackWebhookUrl, {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/toolHandlers.ts",
       "line": 5630,
       "excerpt": "                };\n\n                const response = await axios.post(\n                    `${APP_BASE_URL}/api/account/trial-convert`,\n                    convertBody,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/toolHandlers.ts",
       "line": 6403,
       "excerpt": "        for (const url of webhookUrls) {\n            try {\n                await axios.post(url, payload, {\n                    headers: {\n                        'Content-Type': 'application/json',",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/verify_tools_endpoint.ts",
       "line": 20,
       "excerpt": "    while (Date.now() - startTime < 30000) {\n        try {\n            response = await axios.get(`http://127.0.0.1:${testPort}/health`, { timeout: 1500 });\n            if (response && response.status === 200) break;\n        } catch {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/test_book_a_call_live.ts",
       "line": 29,
       "excerpt": "    };\n\n    const res = await axios({\n        method,\n        url,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/test_earnings_activity_scope.ts",
       "line": 88,
       "excerpt": "\n        try {\n            const res = await fetch(baseUrl + pathStr, { headers });\n            assert(res.status === 200, `Live API returned HTTP ${res.status} for ?sector=apparel&activity=sustainability`);\n            const data: any = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/test_earnings_hygiene_and_binding.ts",
       "line": 99,
       "excerpt": "\nconsole.log('\\n--- 4. Testing tools-manifest.json Integrity ---');\nconst manifestRaw = fs.readFileSync(path.resolve(__dirname, '../tools-manifest.json'), 'utf8');\nconst manifest = JSON.parse(manifestRaw);\n",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/test_intelligence_and_verifier.ts",
       "line": 56,
       "excerpt": "    };\n\n    const res = await axios({\n        method,\n        url: `${baseUrl}${endpoint}`,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/test_live_deployed_mcp_search.ts",
       "line": 55,
       "excerpt": "\n    const filterFormula = encodeURIComponent(`{question} = '${testQuery}'`);\n    const searchResp = await axios.get(`${airtableUrl}?filterByFormula=${filterFormula}`, { headers });\n    const records = searchResp.data.records || [];\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.fodda.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 30 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PUBLICATION_SUMMARY.md:51; Secret Keyword at briefs/Brief - Clerk OAuth Identity Resolution and Skills API Metadata (API Agent).md:32; Hex High Entropy String at briefs/Brief MCP Response Improvements.md:42; Secret Keyword at scratch/probe_ce.mjs:2; Secret Keyword at scratch/probe_ce2.mjs:2; Secret Keyword at scratch/probe_evidence2.mjs:3; Secret Keyword at scratch/probe_node.mjs:2; Secret Keyword at scratch/probe_node2.mjs:2; Secret Keyword at scripts/test_chatgpt_live.mjs:28; Secret Keyword at scripts/test_chatgpt_live.mjs:159; …and 20 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "51 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 4 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 3.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 9 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 189,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "test-mcp-server/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-35jp-ww65-95wh",
       "detail": "direct, CVSS 8.7, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-35jp-ww65-95wh",
       "finding": "axios:GHSA-35jp-ww65-95wh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-542g-h47m-68v8",
       "detail": "direct, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-542g-h47m-68v8",
       "finding": "axios:GHSA-542g-h47m-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-p92q-9vqr-4j8v",
       "detail": "direct, CVSS 8.2, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p92q-9vqr-4j8v",
       "finding": "axios:GHSA-p92q-9vqr-4j8v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.27.1 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.27.1 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "test-mcp-server/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-62hf-57xw-28j9",
       "detail": "direct, CVSS 7.5, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-62hf-57xw-28j9",
       "finding": "axios:GHSA-62hf-57xw-28j9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-777c-7fjr-54vf",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-777c-7fjr-54vf",
       "finding": "axios:GHSA-777c-7fjr-54vf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-hfxv-24rg-xrqf",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hfxv-24rg-xrqf",
       "finding": "axios:GHSA-hfxv-24rg-xrqf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-j5f8-grm9-p9fc",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j5f8-grm9-p9fc",
       "finding": "axios:GHSA-j5f8-grm9-p9fc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-6chq-wfr3-2hj9",
       "detail": "direct, CVSS 7.4, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6chq-wfr3-2hj9",
       "finding": "axios:GHSA-6chq-wfr3-2hj9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-pf86-5x62-jrwf",
       "detail": "direct, CVSS 7.4, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pf86-5x62-jrwf",
       "finding": "axios:GHSA-pf86-5x62-jrwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-q8qp-cvcw-x6jj",
       "detail": "direct, CVSS 7.4, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8qp-cvcw-x6jj",
       "finding": "axios:GHSA-q8qp-cvcw-x6jj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-pmwg-cvhr-8vh7",
       "detail": "direct, CVSS 7.2, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmwg-cvhr-8vh7",
       "finding": "axios:GHSA-pmwg-cvhr-8vh7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-3g43-6gmg-66jw",
       "detail": "direct, CVSS 7.0, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3g43-6gmg-66jw",
       "finding": "axios:GHSA-3g43-6gmg-66jw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.5 — GHSA-3pq3-5fj3-cg6v",
       "detail": "direct, CVSS 7.0, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3pq3-5fj3-cg6v",
       "finding": "axios:GHSA-3pq3-5fj3-cg6v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.5 — GHSA-hmw2-7cc7-3qxx",
       "detail": "transitive, CVSS 8.7, fixed in 4.0.6",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.5 — GHSA-hmw2-7cc7-3qxx",
       "detail": "transitive, CVSS 8.7, fixed in 4.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "linkify-it 5.0.0 — GHSA-22p9-wv53-3rq4",
       "detail": "transitive, CVSS 8.7, fixed in 5.0.1",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-22p9-wv53-3rq4",
       "finding": "linkify-it:GHSA-22p9-wv53-3rq4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "node-forge 1.4.0 — GHSA-86w9-cpqp-85rv",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-86w9-cpqp-85rv",
       "finding": "node-forge:GHSA-86w9-cpqp-85rv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.5 — GHSA-75px-5xx7-5xc7",
       "detail": "transitive, CVSS 8.1, fixed in 7.5.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-75px-5xx7-5xc7",
       "finding": "protobufjs:GHSA-75px-5xx7-5xc7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 5.0.7",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.0 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 2.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.0.1 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "test-mcp-server/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.5 — GHSA-66ff-xgx4-vchm",
       "detail": "transitive, CVSS 7.7, fixed in 7.5.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-66ff-xgx4-vchm",
       "finding": "protobufjs:GHSA-66ff-xgx4-vchm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tmp 0.2.5 — GHSA-ph9p-34f9-6g65",
       "detail": "transitive, CVSS 7.7, fixed in 0.2.6",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ph9p-34f9-6g65",
       "finding": "tmp:GHSA-ph9p-34f9-6g65",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@grpc/grpc-js 1.14.3 — GHSA-5375-pq7m-f5r2",
       "detail": "transitive, CVSS 7.5, fixed in 1.14.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5375-pq7m-f5r2",
       "finding": "@grpc/grpc-js:GHSA-5375-pq7m-f5r2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@grpc/grpc-js 1.14.3 — GHSA-99f4-grh7-6pcq",
       "detail": "transitive, CVSS 7.5, fixed in 1.14.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-99f4-grh7-6pcq",
       "finding": "@grpc/grpc-js:GHSA-99f4-grh7-6pcq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@hono/node-server 1.19.9 — GHSA-wc8c-qw6v-h7f6",
       "detail": "transitive, CVSS 7.5, fixed in 1.19.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wc8c-qw6v-h7f6",
       "finding": "@hono/node-server:GHSA-wc8c-qw6v-h7f6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.0 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.8",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.0 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.0 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.9",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.0 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "express-rate-limit 8.2.1 — GHSA-46wh-pxpv-q5gq",
       "detail": "transitive, CVSS 7.5, fixed in 8.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-46wh-pxpv-q5gq",
       "finding": "express-rate-limit:GHSA-46wh-pxpv-q5gq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "test-mcp-server/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "fodda-vscode/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 79,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "capabilities are described only in vague terms — `03` §7's 30 band, which needs no inference to establish",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY_PACK.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.framethrower/framethrower",
   "version": "1.0.0",
   "slug": "ai-framethrower-framethrower",
   "scanned_at": "2026-10-16T02:19:56+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/framethrower-ai/framethrower-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "47b3560c925293ed1c101b6e879394263268dbeb",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://framethrower.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 69,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 65 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 3.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gateco/gateco",
   "version": "1.13.0",
   "slug": "ai-gateco-gateco",
   "scanned_at": "2026-10-16T02:19:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/fortisil/gateco-sdk-python",
   "package": "pypi:gateco@1.13.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 61,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 5 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:152; Secret Keyword at README.md:120; Secret Keyword at tests/test_cli.py:75; Secret Keyword at tests/test_cli.py:94; Secret Keyword at tests/test_mcp/test_formatters.py:62",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "7 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 9 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gavelin/mcp",
   "version": "1.0.0",
   "slug": "ai-gavelin-mcp",
   "scanned_at": "2026-10-16T02:20:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/gavelin-ai/mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "4b8906f75567c0dab72bb6e9fff67f94db59f6a2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.gavelin.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (GAVELIN_API_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 82,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 19 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 3.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 34,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-88fw-hqm2-52qc",
       "detail": "transitive, CVSS 7.1, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88fw-hqm2-52qc",
       "finding": "hono:GHSA-88fw-hqm2-52qc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-9vqf-7f2p-gf9v",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9vqf-7f2p-gf9v",
       "finding": "hono:GHSA-9vqf-7f2p-gf9v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-gqvv-2mrq-wpjv",
       "detail": "transitive, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-hvrm-45r6-mjfj",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hvrm-45r6-mjfj",
       "finding": "hono:GHSA-hvrm-45r6-mjfj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-rv63-4mwf-qqc2",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rv63-4mwf-qqc2",
       "finding": "hono:GHSA-rv63-4mwf-qqc2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-w62v-xxxg-mg59",
       "detail": "transitive, CVSS 6.1, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w62v-xxxg-mg59",
       "finding": "hono:GHSA-w62v-xxxg-mg59",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@hono/node-server 1.19.14 — GHSA-frvp-7c67-39w9",
       "detail": "transitive, CVSS 5.9, fixed in 1.19.15",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-frvp-7c67-39w9",
       "finding": "@hono/node-server:GHSA-frvp-7c67-39w9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-crvj-82cr-hjcx",
       "detail": "transitive, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-wwfh-h76j-fc44",
       "detail": "transitive, CVSS 5.9, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wwfh-h76j-fc44",
       "finding": "hono:GHSA-wwfh-h76j-fc44",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-2gcr-mfcq-wcc3",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2gcr-mfcq-wcc3",
       "finding": "hono:GHSA-2gcr-mfcq-wcc3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-54fx-42gc-7vw4",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-8j4g-w8fx-2239",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-g6gw-c38x-mqfc",
       "detail": "transitive, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-j6c9-x7qj-28xf",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6c9-x7qj-28xf",
       "finding": "hono:GHSA-j6c9-x7qj-28xf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-p77w-8qqv-26rm",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p77w-8qqv-26rm",
       "finding": "hono:GHSA-p77w-8qqv-26rm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-xrhx-7g5j-rcj5",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xrhx-7g5j-rcj5",
       "finding": "hono:GHSA-xrhx-7g5j-rcj5",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-v2v4-37r5-5v8g",
       "detail": "transitive, CVSS 5.3, fixed in 10.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2v4-37r5-5v8g",
       "finding": "ip-address:GHSA-v2v4-37r5-5v8g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-f23p-vx2j-j53r",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-f577-qrjj-4474",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f577-qrjj-4474",
       "finding": "hono:GHSA-f577-qrjj-4474",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-wgpf-jwqj-8h8p",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wgpf-jwqj-8h8p",
       "finding": "hono:GHSA-wgpf-jwqj-8h8p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-xgm2-5f3f-mvvc",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xgm2-5f3f-mvvc",
       "finding": "hono:GHSA-xgm2-5f3f-mvvc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-69xw-7hcm-h432",
       "detail": "transitive, CVSS 4.7, fixed in 4.12.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-69xw-7hcm-h432",
       "finding": "hono:GHSA-69xw-7hcm-h432",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-hxh3-vqpv-xpqv",
       "detail": "transitive, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-3hrh-pfw6-9m5x",
       "detail": "transitive, CVSS 4.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3hrh-pfw6-9m5x",
       "finding": "hono:GHSA-3hrh-pfw6-9m5x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-458j-xx4x-4375",
       "detail": "transitive, CVSS 4.3, fixed in 4.12.14",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-458j-xx4x-4375",
       "finding": "hono:GHSA-458j-xx4x-4375",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-qp7p-654g-cw7p",
       "detail": "transitive, CVSS 4.3, fixed in 4.12.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qp7p-654g-cw7p",
       "finding": "hono:GHSA-qp7p-654g-cw7p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-hm8q-7f3q-5f36",
       "detail": "transitive, CVSS 3.8, fixed in 4.12.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hm8q-7f3q-5f36",
       "finding": "hono:GHSA-hm8q-7f3q-5f36",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 2.2.2 — GHSA-v422-hmwv-36x6",
       "detail": "transitive, CVSS 3.7, fixed in 2.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v422-hmwv-36x6",
       "finding": "body-parser:GHSA-v422-hmwv-36x6",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.12 — GHSA-79qm-7rj5-m7r9",
       "detail": "transitive, CVSS 3.7, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-79qm-7rj5-m7r9",
       "finding": "hono:GHSA-79qm-7rj5-m7r9",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gemus/gemus",
   "version": "0.1.0",
   "slug": "ai-gemus-gemus",
   "scanned_at": "2026-10-16T02:20:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Gemus-AI/Gemus",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gemus.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/Gemus-AI/Gemus) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gency/gency-lite",
   "version": "1.0.0",
   "slug": "ai-gency-gency-lite",
   "scanned_at": "2026-10-16T02:20:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/studiolab-dev/gency-lite",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://lite.gency.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/studiolab-dev/gency-lite) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.getfacade/mcp",
   "version": "0.2.0",
   "slug": "ai-getfacade-mcp",
   "scanned_at": "2026-10-16T02:20:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/getfacade/mcp",
   "package": "npm:@getfacade/mcp@0.2.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/api.js",
       "line": 170,
       "excerpt": "async function fetchWithin(timeoutMs, url, options) {\n  try {\n    return await fetch(url, { ...options, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (error) {\n    if (error?.name === 'TimeoutError' || error?.name === 'AbortError') {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/image.js",
       "line": 43,
       "excerpt": "  }\n\n  const response = await fetch(url, { signal: AbortSignal.timeout(URL_FETCH_TIMEOUT_MS), redirect: 'follow' });\n\n  if (!response.ok) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:67",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "1 tool registration site(s) detected, but tools are registered inside a loop, so that is a lower bound on how many the server exposes and `03` §4's threshold of 3 cannot be applied",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 15 day(s) ago (by tags), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gethal/mcp",
   "version": "1.0.0",
   "slug": "ai-gethal-mcp",
   "scanned_at": "2026-10-16T02:20:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://gitlab.com/acf5914932/gethal.ai-lp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gethal.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "`03` §5's maintenance signals are retrieved from the GitHub API and this server's repository is hosted on gitlab.com; forge retrieval for it is not built. This is a limit of ours, not a finding about the server.",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://gitlab.com/acf5914932/gethal.ai-lp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.getminds/minds",
   "version": "2.0.2",
   "slug": "ai-getminds-minds",
   "scanned_at": "2026-10-16T02:20:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/minds-ai-co/minds-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "b1c55bf89f54215ff3c872a0fa7e699dd2a51b20",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "integrations/microsoft-mcp/scripts/sync-tools.mjs",
       "line": 21,
       "excerpt": "\nasync function post(body, sessionId) {\n  const response = await fetch(source, {\n    method: \"POST\",\n    headers: sessionId",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://getminds.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (MICROSOFT_KEY_VAULT_URI) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 7 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 3.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 9 days (by releases), last release 59 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.getoptimal/optibot",
   "version": "1.4.1",
   "slug": "ai-getoptimal-optibot",
   "scanned_at": "2026-10-16T02:20:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "npm:@optimalai/optibot-mcp@1.4.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (44 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:49",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 73,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.getperspective/mcp",
   "version": "0.0.8",
   "slug": "ai-getperspective-mcp",
   "scanned_at": "2026-10-16T02:20:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Perspective-AI/mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "e75f785368137e79ba2bb72e261a8f6ccaaddaa6",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://getperspective.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (PERSPECTIVE_ACCESS_TOKEN) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 45 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 2.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 171 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.24.3 — GHSA-8r9q-7v3j-jr4g",
       "detail": "direct, CVSS 8.7, fixed in 1.25.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8r9q-7v3j-jr4g",
       "finding": "@modelcontextprotocol/sdk:GHSA-8r9q-7v3j-jr4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.24.3 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.24.3 — GHSA-345p-7cg4-v4c7",
       "detail": "direct, CVSS 7.1, fixed in 1.26.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-345p-7cg4-v4c7",
       "finding": "@modelcontextprotocol/sdk:GHSA-345p-7cg4-v4c7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.3.0 — GHSA-j3q9-mxjg-w52f",
       "detail": "transitive, CVSS 7.5, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j3q9-mxjg-w52f",
       "finding": "path-to-regexp:GHSA-j3q9-mxjg-w52f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-6rw7-vpxm-498p",
       "detail": "transitive, CVSS 6.3, fixed in 6.14.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6rw7-vpxm-498p",
       "finding": "qs:GHSA-6rw7-vpxm-498p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.3.0 — GHSA-27v5-c462-wpq7",
       "detail": "transitive, CVSS 5.9, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-27v5-c462-wpq7",
       "finding": "path-to-regexp:GHSA-27v5-c462-wpq7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ajv 8.17.1 — GHSA-2g4f-4pwh-qvx6",
       "detail": "transitive, CVSS 5.5, fixed in 8.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2g4f-4pwh-qvx6",
       "finding": "ajv:GHSA-2g4f-4pwh-qvx6",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 2.2.1 — GHSA-v422-hmwv-36x6",
       "detail": "transitive, CVSS 3.7, fixed in 2.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v422-hmwv-36x6",
       "finding": "body-parser:GHSA-v422-hmwv-36x6",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-w7fw-mjwx-w883",
       "detail": "transitive, CVSS 3.7, fixed in 6.14.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7fw-mjwx-w883",
       "finding": "qs:GHSA-w7fw-mjwx-w883",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gondola/gondola",
   "version": "0.1.6",
   "slug": "ai-gondola-gondola",
   "scanned_at": "2026-10-16T02:20:24+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/gondola-ai/gondola-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "086cf163bffaef46f422a55b56f429c99a03009c",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.gondola.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 4 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 5 issue(s) in the last 6 months: 47.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 30 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-5jgf-p345-68v8",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5jgf-p345-68v8",
       "finding": "fast-uri:GHSA-5jgf-p345-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-22jq-vg5j-6vgg",
       "detail": "transitive, CVSS 6.9, fixed in 10.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-22jq-vg5j-6vgg",
       "finding": "ip-address:GHSA-22jq-vg5j-6vgg",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-2vr4-cq9g-pvrc",
       "detail": "transitive, CVSS 6.9, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2vr4-cq9g-pvrc",
       "finding": "ip-address:GHSA-2vr4-cq9g-pvrc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-4xrf-jv44-h6hh",
       "detail": "transitive, CVSS 6.9, fixed in 10.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xrf-jv44-h6hh",
       "finding": "ip-address:GHSA-4xrf-jv44-h6hh",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-gqvv-2mrq-wpjv",
       "detail": "transitive, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-crvj-82cr-hjcx",
       "detail": "transitive, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-54fx-42gc-7vw4",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-8j4g-w8fx-2239",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-g6gw-c38x-mqfc",
       "detail": "transitive, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-f23p-vx2j-j53r",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-hxh3-vqpv-xpqv",
       "detail": "transitive, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-79qm-7rj5-m7r9",
       "detail": "transitive, CVSS 3.7, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-79qm-7rj5-m7r9",
       "finding": "hono:GHSA-79qm-7rj5-m7r9",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gregbenza/meet",
   "version": "1.0.1",
   "slug": "ai-gregbenza-meet",
   "scanned_at": "2026-10-16T02:20:27+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/TheNonduality/gregbenza-ai",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "945593a9e15101ae24b20100ee67ca95e94304e2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 51,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "1 file could not be parsed and was not scanned",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "netlify/_parked/waystation-mcp.mjs",
       "line": 64,
       "excerpt": "\nasync function fetchText(p) {\n  const r = await fetch(SITE + p);\n  if (!r.ok) throw new Error(`${p}: ${r.status}`);\n  return r.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "public/live.js",
       "line": 208,
       "excerpt": "    if (document.hidden) return wait();\n    try {\n      const res = await fetch(location.href, { cache: 'no-store', credentials: 'same-origin' });\n      if (!res.ok) throw new Error(String(res.status));\n      const doc = new DOMParser().parseFromString(await res.text(), 'text/html');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 52,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source reads a credential header but no enforcing middleware or rejection path was found — `03` §4's \"present but optional or trivially bypassable\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gregbenza.ai/mcp/meet; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "AWS Access Key at parked/public-projects/pico-repair/rebuild_moov.py:32; …and 4 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 74,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 31 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 4 issue(s) in the last 6 months: 6.6 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "astro 5.18.2 — GHSA-26w7-cxv4-gfx2",
       "detail": "direct, CVSS 9.8, fixed in 7.2.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26w7-cxv4-gfx2",
       "finding": "astro:GHSA-26w7-cxv4-gfx2",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-2pvr-wf23-7pc7",
       "detail": "direct, CVSS 7.5, fixed in 6.4.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2pvr-wf23-7pc7",
       "finding": "astro:GHSA-2pvr-wf23-7pc7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-8hv8-536x-4wqp",
       "detail": "direct, CVSS 7.1, fixed in 6.3.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8hv8-536x-4wqp",
       "finding": "astro:GHSA-8hv8-536x-4wqp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-cache-semantics 4.2.0 — GHSA-ch52-4w7c-c8xp",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ch52-4w7c-c8xp",
       "finding": "http-cache-semantics:GHSA-ch52-4w7c-c8xp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 2.0.2 — GHSA-5p2g-fcmc-qvqq",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p2g-fcmc-qvqq",
       "finding": "image-size:GHSA-5p2g-fcmc-qvqq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 2.0.2 — GHSA-w3rx-r6r6-pgpr",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w3rx-r6r6-pgpr",
       "finding": "image-size:GHSA-w3rx-r6r6-pgpr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-mcm9-63f2-9j32",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mcm9-63f2-9j32",
       "finding": "devalue:GHSA-mcm9-63f2-9j32",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-r9w8-h9r3-54w4",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r9w8-h9r3-54w4",
       "finding": "devalue:GHSA-r9w8-h9r3-54w4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-x5rw-q4pp-hg5g",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5rw-q4pp-hg5g",
       "finding": "devalue:GHSA-x5rw-q4pp-hg5g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.16 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "smol-toml 1.7.0 — GHSA-7w5x-hrqm-74c2",
       "detail": "transitive, CVSS 8.2, fixed in 1.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7w5x-hrqm-74c2",
       "finding": "smol-toml:GHSA-7w5x-hrqm-74c2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.2 — GHSA-w27v-7q3p-w38r",
       "detail": "transitive, CVSS 8.2, fixed in 4.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w27v-7q3p-w38r",
       "finding": "svgo:GHSA-w27v-7q3p-w38r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 3.2.0 — GHSA-x8mw-p69m-v3mx",
       "detail": "transitive, CVSS 7.5, fixed in 3.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x8mw-p69m-v3mx",
       "finding": "@fastify/busboy:GHSA-x8mw-p69m-v3mx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 3.2.0 — GHSA-xjh9-v7x6-24jw",
       "detail": "transitive, CVSS 7.5, fixed in 3.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xjh9-v7x6-24jw",
       "finding": "@fastify/busboy:GHSA-xjh9-v7x6-24jw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-j22f-vq7h-c4qm",
       "detail": "transitive, CVSS 7.5, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j22f-vq7h-c4qm",
       "finding": "devalue:GHSA-j22f-vq7h-c4qm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.3.0 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.3.0 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "transitive, CVSS 7.0, fixed in 0.35.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-376h-93r7-7g6f",
       "detail": "direct, CVSS 6.3, fixed in 7.2.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-376h-93r7-7g6f",
       "finding": "astro:GHSA-376h-93r7-7g6f",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-j687-52p2-xcff",
       "detail": "direct, CVSS 6.1, fixed in 6.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j687-52p2-xcff",
       "finding": "astro:GHSA-j687-52p2-xcff",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-xr5h-phrj-8vxv",
       "detail": "direct, CVSS 6.1, fixed in 6.1.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xr5h-phrj-8vxv",
       "finding": "astro:GHSA-xr5h-phrj-8vxv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-4g3v-8h47-v7g6",
       "detail": "direct, CVSS 5.3, fixed in 7.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4g3v-8h47-v7g6",
       "finding": "astro:GHSA-4g3v-8h47-v7g6",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-f48w-9m4c-m7f5",
       "detail": "direct, CVSS 5.1, fixed in 7.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f48w-9m4c-m7f5",
       "finding": "astro:GHSA-f48w-9m4c-m7f5",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-jrpj-wcv7-9fh9",
       "detail": "direct, CVSS 4.2, fixed in 6.4.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jrpj-wcv7-9fh9",
       "finding": "astro:GHSA-jrpj-wcv7-9fh9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-4q55-j62x-fr9h",
       "detail": "transitive, CVSS 6.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4q55-j62x-fr9h",
       "finding": "devalue:GHSA-4q55-j62x-fr9h",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-hx4r-w6wj-j8fg",
       "detail": "transitive, CVSS 6.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hx4r-w6wj-j8fg",
       "finding": "devalue:GHSA-hx4r-w6wj-j8fg",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.22 — GHSA-fxqj-rqcc-2cmp",
       "detail": "transitive, CVSS 6.3, fixed in 8.5.23",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp",
       "finding": "postcss:GHSA-fxqj-rqcc-2cmp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.2 — GHSA-4vpr-x523-8j87",
       "detail": "transitive, CVSS 6.1, fixed in 4.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4vpr-x523-8j87",
       "finding": "svgo:GHSA-4vpr-x523-8j87",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 3.2.0 — GHSA-gxm5-99cw-xjw9",
       "detail": "transitive, CVSS 5.8, fixed in 3.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gxm5-99cw-xjw9",
       "finding": "@fastify/busboy:GHSA-gxm5-99cw-xjw9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@opentelemetry/core 2.7.1 — GHSA-8988-4f7v-96qf",
       "detail": "transitive, CVSS 5.3, fixed in 2.8.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8988-4f7v-96qf",
       "finding": "@opentelemetry/core:GHSA-8988-4f7v-96qf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-9rgm-9g3h-6x36",
       "detail": "transitive, CVSS 5.3, fixed in 5.9.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9rgm-9g3h-6x36",
       "finding": "devalue:GHSA-9rgm-9g3h-6x36",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "smol-toml 1.7.0 — GHSA-r4xh-jqrq-34v2",
       "detail": "transitive, CVSS 5.3, fixed in 1.9.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r4xh-jqrq-34v2",
       "finding": "smol-toml:GHSA-r4xh-jqrq-34v2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-7pw4-f3q4-r2p2",
       "detail": "direct, CVSS 2.1, fixed in 7.0.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7pw4-f3q4-r2p2",
       "finding": "astro:GHSA-7pw4-f3q4-r2p2",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.27.7 — GHSA-g7r4-m6w7-qqqr",
       "detail": "transitive, CVSS 2.5, fixed in 0.28.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g7r4-m6w7-qqqr",
       "finding": "esbuild:GHSA-g7r4-m6w7-qqqr",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-wf3x-273g-mvxv",
       "detail": "transitive, CVSS 2.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wf3x-273g-mvxv",
       "finding": "devalue:GHSA-wf3x-273g-mvxv",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gregbenza/openhouse",
   "version": "1.0.0",
   "slug": "ai-gregbenza-openhouse",
   "scanned_at": "2026-10-16T02:21:05+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/TheNonduality/gregbenza-ai",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "945593a9e15101ae24b20100ee67ca95e94304e2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 51,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "1 file could not be parsed and was not scanned",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "netlify/_parked/waystation-mcp.mjs",
       "line": 64,
       "excerpt": "\nasync function fetchText(p) {\n  const r = await fetch(SITE + p);\n  if (!r.ok) throw new Error(`${p}: ${r.status}`);\n  return r.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "public/live.js",
       "line": 208,
       "excerpt": "    if (document.hidden) return wait();\n    try {\n      const res = await fetch(location.href, { cache: 'no-store', credentials: 'same-origin' });\n      if (!res.ok) throw new Error(String(res.status));\n      const doc = new DOMParser().parseFromString(await res.text(), 'text/html');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 52,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source reads a credential header but no enforcing middleware or rejection path was found — `03` §4's \"present but optional or trivially bypassable\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gregbenza.ai/mcp/openhouse; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "AWS Access Key at parked/public-projects/pico-repair/rebuild_moov.py:32; …and 4 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 74,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 31 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 4 issue(s) in the last 6 months: 6.6 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "astro 5.18.2 — GHSA-26w7-cxv4-gfx2",
       "detail": "direct, CVSS 9.8, fixed in 7.2.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26w7-cxv4-gfx2",
       "finding": "astro:GHSA-26w7-cxv4-gfx2",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-2pvr-wf23-7pc7",
       "detail": "direct, CVSS 7.5, fixed in 6.4.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2pvr-wf23-7pc7",
       "finding": "astro:GHSA-2pvr-wf23-7pc7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-8hv8-536x-4wqp",
       "detail": "direct, CVSS 7.1, fixed in 6.3.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8hv8-536x-4wqp",
       "finding": "astro:GHSA-8hv8-536x-4wqp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-cache-semantics 4.2.0 — GHSA-ch52-4w7c-c8xp",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ch52-4w7c-c8xp",
       "finding": "http-cache-semantics:GHSA-ch52-4w7c-c8xp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 2.0.2 — GHSA-5p2g-fcmc-qvqq",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p2g-fcmc-qvqq",
       "finding": "image-size:GHSA-5p2g-fcmc-qvqq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 2.0.2 — GHSA-w3rx-r6r6-pgpr",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w3rx-r6r6-pgpr",
       "finding": "image-size:GHSA-w3rx-r6r6-pgpr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-mcm9-63f2-9j32",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mcm9-63f2-9j32",
       "finding": "devalue:GHSA-mcm9-63f2-9j32",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-r9w8-h9r3-54w4",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r9w8-h9r3-54w4",
       "finding": "devalue:GHSA-r9w8-h9r3-54w4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-x5rw-q4pp-hg5g",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5rw-q4pp-hg5g",
       "finding": "devalue:GHSA-x5rw-q4pp-hg5g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.16 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "smol-toml 1.7.0 — GHSA-7w5x-hrqm-74c2",
       "detail": "transitive, CVSS 8.2, fixed in 1.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7w5x-hrqm-74c2",
       "finding": "smol-toml:GHSA-7w5x-hrqm-74c2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.2 — GHSA-w27v-7q3p-w38r",
       "detail": "transitive, CVSS 8.2, fixed in 4.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w27v-7q3p-w38r",
       "finding": "svgo:GHSA-w27v-7q3p-w38r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 3.2.0 — GHSA-x8mw-p69m-v3mx",
       "detail": "transitive, CVSS 7.5, fixed in 3.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x8mw-p69m-v3mx",
       "finding": "@fastify/busboy:GHSA-x8mw-p69m-v3mx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 3.2.0 — GHSA-xjh9-v7x6-24jw",
       "detail": "transitive, CVSS 7.5, fixed in 3.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xjh9-v7x6-24jw",
       "finding": "@fastify/busboy:GHSA-xjh9-v7x6-24jw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-j22f-vq7h-c4qm",
       "detail": "transitive, CVSS 7.5, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j22f-vq7h-c4qm",
       "finding": "devalue:GHSA-j22f-vq7h-c4qm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.3.0 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.3.0 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "transitive, CVSS 7.0, fixed in 0.35.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-376h-93r7-7g6f",
       "detail": "direct, CVSS 6.3, fixed in 7.2.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-376h-93r7-7g6f",
       "finding": "astro:GHSA-376h-93r7-7g6f",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-j687-52p2-xcff",
       "detail": "direct, CVSS 6.1, fixed in 6.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j687-52p2-xcff",
       "finding": "astro:GHSA-j687-52p2-xcff",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-xr5h-phrj-8vxv",
       "detail": "direct, CVSS 6.1, fixed in 6.1.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xr5h-phrj-8vxv",
       "finding": "astro:GHSA-xr5h-phrj-8vxv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-4g3v-8h47-v7g6",
       "detail": "direct, CVSS 5.3, fixed in 7.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4g3v-8h47-v7g6",
       "finding": "astro:GHSA-4g3v-8h47-v7g6",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-f48w-9m4c-m7f5",
       "detail": "direct, CVSS 5.1, fixed in 7.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f48w-9m4c-m7f5",
       "finding": "astro:GHSA-f48w-9m4c-m7f5",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-jrpj-wcv7-9fh9",
       "detail": "direct, CVSS 4.2, fixed in 6.4.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jrpj-wcv7-9fh9",
       "finding": "astro:GHSA-jrpj-wcv7-9fh9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-4q55-j62x-fr9h",
       "detail": "transitive, CVSS 6.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4q55-j62x-fr9h",
       "finding": "devalue:GHSA-4q55-j62x-fr9h",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-hx4r-w6wj-j8fg",
       "detail": "transitive, CVSS 6.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hx4r-w6wj-j8fg",
       "finding": "devalue:GHSA-hx4r-w6wj-j8fg",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.22 — GHSA-fxqj-rqcc-2cmp",
       "detail": "transitive, CVSS 6.3, fixed in 8.5.23",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp",
       "finding": "postcss:GHSA-fxqj-rqcc-2cmp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.2 — GHSA-4vpr-x523-8j87",
       "detail": "transitive, CVSS 6.1, fixed in 4.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4vpr-x523-8j87",
       "finding": "svgo:GHSA-4vpr-x523-8j87",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 3.2.0 — GHSA-gxm5-99cw-xjw9",
       "detail": "transitive, CVSS 5.8, fixed in 3.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gxm5-99cw-xjw9",
       "finding": "@fastify/busboy:GHSA-gxm5-99cw-xjw9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@opentelemetry/core 2.7.1 — GHSA-8988-4f7v-96qf",
       "detail": "transitive, CVSS 5.3, fixed in 2.8.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8988-4f7v-96qf",
       "finding": "@opentelemetry/core:GHSA-8988-4f7v-96qf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-9rgm-9g3h-6x36",
       "detail": "transitive, CVSS 5.3, fixed in 5.9.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9rgm-9g3h-6x36",
       "finding": "devalue:GHSA-9rgm-9g3h-6x36",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "smol-toml 1.7.0 — GHSA-r4xh-jqrq-34v2",
       "detail": "transitive, CVSS 5.3, fixed in 1.9.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r4xh-jqrq-34v2",
       "finding": "smol-toml:GHSA-r4xh-jqrq-34v2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.2 — GHSA-7pw4-f3q4-r2p2",
       "detail": "direct, CVSS 2.1, fixed in 7.0.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7pw4-f3q4-r2p2",
       "finding": "astro:GHSA-7pw4-f3q4-r2p2",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.27.7 — GHSA-g7r4-m6w7-qqqr",
       "detail": "transitive, CVSS 2.5, fixed in 0.28.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g7r4-m6w7-qqqr",
       "finding": "esbuild:GHSA-g7r4-m6w7-qqqr",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.2 — GHSA-wf3x-273g-mvxv",
       "detail": "transitive, CVSS 2.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wf3x-273g-mvxv",
       "finding": "devalue:GHSA-wf3x-273g-mvxv",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.groundroute/web-search",
   "version": "0.1.0",
   "slug": "ai-groundroute-web-search",
   "scanned_at": "2026-10-16T02:21:53+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/PROJECT-B-26/groundroute-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "0c4238915edd49ef1e0d920fc2c7f88d8417afd0",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.6",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.groundroute.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (GROUNDROUTE_API_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "1 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 119 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 2.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source: requirements.txt does not pin every requirement to one exact version, so dependency versions are unresolved and no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.gtfi/groundtruth",
   "version": "1.0.1",
   "slug": "ai-gtfi-groundtruth",
   "scanned_at": "2026-10-16T02:21:57+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Dranos-Bot/groundtruth-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "ff65c2d6816e57eda50b30120778ab3f0042980c",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gtfi.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 82 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.haymon/database",
   "version": "0.7.0",
   "slug": "ai-haymon-database",
   "scanned_at": "2026-10-16T02:53:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/haymon-ai/database",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "54f40caed164f1677c7d96ceb860dc1d448bd2f8",
   "registry_state": "deprecated",
   "registry_note": "The registry lists this server with status deprecated (observed 2026-10-16). That is the publisher's own label, not a finding of ours, and no axis scores it. The scan below is current.",
   "files_scanned": 21,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.4",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "network transport, and no authentication middleware, credential-header read, or inbound token verification appears anywhere in the source we fetched — `03` §4's \"no authentication; HTTP transport\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "transport is streamable-http but the entry declares no endpoint URL to read a scheme from",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at .github/workflows/ci.yml:72; Secret Keyword at README.md:63; Secret Keyword at docs/content/docs/configuration.mdx:106; Secret Keyword at tests/compose.yml:10",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 28 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 4 issue(s) in the last 6 months: 3.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 2 days (by releases), last release 140 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "13 vulnerabilities could not be placed in `03` §6's table and are listed but not scored",
     "assessed_weight": "0.84",
     "fault": null,
     "evidence_omitted": 35,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "next 16.2.1 — GHSA-2xp9-vwfh-vxw4",
       "detail": "direct, CVSS 9.5, fixed in 16.3.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2xp9-vwfh-vxw4",
       "finding": "next:GHSA-2xp9-vwfh-vxw4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-vcvr-r3jv-pc5j",
       "detail": "direct, CVSS 9.5, fixed in 16.3.6",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vcvr-r3jv-pc5j",
       "finding": "next:GHSA-vcvr-r3jv-pc5j",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-p293-qw3h-jr36",
       "detail": "direct, CVSS 9.0, fixed in 16.3.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p293-qw3h-jr36",
       "finding": "next:GHSA-p293-qw3h-jr36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-c4j6-fc7j-m34r",
       "detail": "direct, CVSS 8.6, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c4j6-fc7j-m34r",
       "finding": "next:GHSA-c4j6-fc7j-m34r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-6gpp-xcg3-4w24",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6gpp-xcg3-4w24",
       "finding": "next:GHSA-6gpp-xcg3-4w24",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-89xv-2m56-2m9x",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-89xv-2m56-2m9x",
       "finding": "next:GHSA-89xv-2m56-2m9x",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-cjq9-62q9-8jv4",
       "detail": "direct, CVSS 8.3, fixed in 16.3.8",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cjq9-62q9-8jv4",
       "finding": "next:GHSA-cjq9-62q9-8jv4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-p9j2-gv94-2wf4",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p9j2-gv94-2wf4",
       "finding": "next:GHSA-p9j2-gv94-2wf4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-m99w-x7hq-7vfj",
       "detail": "direct, CVSS 8.2, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m99w-x7hq-7vfj",
       "finding": "next:GHSA-m99w-x7hq-7vfj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-492v-c6pp-mqqv",
       "detail": "direct, CVSS 8.1, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-492v-c6pp-mqqv",
       "finding": "next:GHSA-492v-c6pp-mqqv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-267c-6grr-h53f",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-267c-6grr-h53f",
       "finding": "next:GHSA-267c-6grr-h53f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-26hh-7cqf-hhc6",
       "detail": "direct, CVSS 7.5, fixed in 16.2.6",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26hh-7cqf-hhc6",
       "finding": "next:GHSA-26hh-7cqf-hhc6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-36qx-fr4f-26g5",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-36qx-fr4f-26g5",
       "finding": "next:GHSA-36qx-fr4f-26g5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-8h8q-6873-q5fj",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8h8q-6873-q5fj",
       "finding": "next:GHSA-8h8q-6873-q5fj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-mg66-mrh9-m8jx",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mg66-mrh9-m8jx",
       "finding": "next:GHSA-mg66-mrh9-m8jx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-q4gf-8mx6-v5v3",
       "detail": "direct, CVSS 7.5, fixed in 16.2.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q4gf-8mx6-v5v3",
       "finding": "next:GHSA-q4gf-8mx6-v5v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-6g55-p6wh-862q",
       "detail": "direct, CVSS 7.5, fixed in 8.5.12",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.8 — GHSA-6g55-p6wh-862q",
       "detail": "direct, CVSS 7.5, fixed in 8.5.12",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-r28c-9q8g-f849",
       "detail": "direct, CVSS 7.5, fixed in 8.5.18",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.8 — GHSA-r28c-9q8g-f849",
       "detail": "direct, CVSS 7.5, fixed in 8.5.18",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 2.0.2 — GHSA-5p2g-fcmc-qvqq",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p2g-fcmc-qvqq",
       "finding": "image-size:GHSA-5p2g-fcmc-qvqq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 2.0.2 — GHSA-w3rx-r6r6-pgpr",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w3rx-r6r6-pgpr",
       "finding": "image-size:GHSA-w3rx-r6r6-pgpr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "compression 1.8.1 — GHSA-vc2v-76pw-4v95",
       "detail": "transitive, CVSS 7.5, fixed in 1.8.2",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vc2v-76pw-4v95",
       "finding": "compression:GHSA-vc2v-76pw-4v95",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.0",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-xwg4-73v4-xw9w",
       "detail": "transitive, CVSS 7.4, fixed in 3.3.12",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xwg4-73v4-xw9w",
       "finding": "nanoid:GHSA-xwg4-73v4-xw9w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "transitive, CVSS 7.0, fixed in 0.35.0",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "rmcp 1.5.0 — GHSA-33f5-2c5q-wgwj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.2, fixed in 2.0.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-33f5-2c5q-wgwj",
       "finding": "rmcp:GHSA-33f5-2c5q-wgwj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.5.0 — GHSA-9pj6-vhgr-3mwh",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 2.0.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9pj6-vhgr-3mwh",
       "finding": "rmcp:GHSA-9pj6-vhgr-3mwh",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.12 — RUSTSEC-2026-0104",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.103.13",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0104",
       "finding": "rustls-webpki:RUSTSEC-2026-0104",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "next 16.2.1 — GHSA-4633-3j49-mh5q",
       "detail": "direct, CVSS 6.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4633-3j49-mh5q",
       "finding": "next:GHSA-4633-3j49-mh5q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.haymon/dbmcp",
   "version": "0.14.0",
   "slug": "ai-haymon-dbmcp",
   "scanned_at": "2026-10-16T02:22:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/haymon-ai/dbmcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "7a1de5e8d9480ea80146205ecba0f20ab1a650b9",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 21,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 20,
     "reason": "",
     "assessed_weight": "0.6",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "network transport, and no authentication middleware, credential-header read, or inbound token verification appears anywhere in the source we fetched — `03` §4's \"no authentication; HTTP transport\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "transport is streamable-http but the entry declares no endpoint URL to read a scheme from",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "GitHub Token at crates/pii/benches/corpus/api_key.toml:3; JSON Web Token at crates/pii/benches/corpus/jwt_token.toml:2; JSON Web Token at crates/pii/benches/corpus/jwt_token.toml:3; JSON Web Token at crates/pii/benches/corpus/jwt_token.toml:4; Private Key at crates/pii/benches/corpus/private_key.toml:2; Private Key at crates/pii/benches/corpus/private_key.toml:3; Private Key at crates/pii/benches/corpus/private_key.toml:4; AWS Access Key at crates/pii/src/recognizers/generic/api_key.rs:78; GitHub Token at crates/pii/src/recognizers/generic/api_key.rs:82; JSON Web Token at crates/pii/src/recognizers/generic/jwt_token.rs:29; …and 70 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 28 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 4 issue(s) in the last 6 months: 3.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 2 days (by releases), last release 140 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "2 vulnerabilities could not be placed in `03` §6's table and are listed but not scored",
     "assessed_weight": "0.97",
     "fault": null,
     "evidence_omitted": 24,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "next 16.2.1 — GHSA-2xp9-vwfh-vxw4",
       "detail": "direct, CVSS 9.5, fixed in 16.3.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2xp9-vwfh-vxw4",
       "finding": "next:GHSA-2xp9-vwfh-vxw4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-vcvr-r3jv-pc5j",
       "detail": "direct, CVSS 9.5, fixed in 16.3.6",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vcvr-r3jv-pc5j",
       "finding": "next:GHSA-vcvr-r3jv-pc5j",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-p293-qw3h-jr36",
       "detail": "direct, CVSS 9.0, fixed in 16.3.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p293-qw3h-jr36",
       "finding": "next:GHSA-p293-qw3h-jr36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-c4j6-fc7j-m34r",
       "detail": "direct, CVSS 8.6, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c4j6-fc7j-m34r",
       "finding": "next:GHSA-c4j6-fc7j-m34r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-6gpp-xcg3-4w24",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6gpp-xcg3-4w24",
       "finding": "next:GHSA-6gpp-xcg3-4w24",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-89xv-2m56-2m9x",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-89xv-2m56-2m9x",
       "finding": "next:GHSA-89xv-2m56-2m9x",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-cjq9-62q9-8jv4",
       "detail": "direct, CVSS 8.3, fixed in 16.3.8",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cjq9-62q9-8jv4",
       "finding": "next:GHSA-cjq9-62q9-8jv4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-p9j2-gv94-2wf4",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p9j2-gv94-2wf4",
       "finding": "next:GHSA-p9j2-gv94-2wf4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-m99w-x7hq-7vfj",
       "detail": "direct, CVSS 8.2, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m99w-x7hq-7vfj",
       "finding": "next:GHSA-m99w-x7hq-7vfj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-492v-c6pp-mqqv",
       "detail": "direct, CVSS 8.1, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-492v-c6pp-mqqv",
       "finding": "next:GHSA-492v-c6pp-mqqv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-267c-6grr-h53f",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-267c-6grr-h53f",
       "finding": "next:GHSA-267c-6grr-h53f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-26hh-7cqf-hhc6",
       "detail": "direct, CVSS 7.5, fixed in 16.2.6",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26hh-7cqf-hhc6",
       "finding": "next:GHSA-26hh-7cqf-hhc6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-36qx-fr4f-26g5",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-36qx-fr4f-26g5",
       "finding": "next:GHSA-36qx-fr4f-26g5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-8h8q-6873-q5fj",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8h8q-6873-q5fj",
       "finding": "next:GHSA-8h8q-6873-q5fj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-mg66-mrh9-m8jx",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mg66-mrh9-m8jx",
       "finding": "next:GHSA-mg66-mrh9-m8jx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-q4gf-8mx6-v5v3",
       "detail": "direct, CVSS 7.5, fixed in 16.2.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q4gf-8mx6-v5v3",
       "finding": "next:GHSA-q4gf-8mx6-v5v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-6g55-p6wh-862q",
       "detail": "direct, CVSS 7.5, fixed in 8.5.12",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.8 — GHSA-6g55-p6wh-862q",
       "detail": "direct, CVSS 7.5, fixed in 8.5.12",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-r28c-9q8g-f849",
       "detail": "direct, CVSS 7.5, fixed in 8.5.18",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.8 — GHSA-r28c-9q8g-f849",
       "detail": "direct, CVSS 7.5, fixed in 8.5.18",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 2.0.2 — GHSA-5p2g-fcmc-qvqq",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p2g-fcmc-qvqq",
       "finding": "image-size:GHSA-5p2g-fcmc-qvqq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 2.0.2 — GHSA-w3rx-r6r6-pgpr",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w3rx-r6r6-pgpr",
       "finding": "image-size:GHSA-w3rx-r6r6-pgpr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "compression 1.8.1 — GHSA-vc2v-76pw-4v95",
       "detail": "transitive, CVSS 7.5, fixed in 1.8.2",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vc2v-76pw-4v95",
       "finding": "compression:GHSA-vc2v-76pw-4v95",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.0",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-xwg4-73v4-xw9w",
       "detail": "transitive, CVSS 7.4, fixed in 3.3.12",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xwg4-73v4-xw9w",
       "finding": "nanoid:GHSA-xwg4-73v4-xw9w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "transitive, CVSS 7.0, fixed in 0.35.0",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-4633-3j49-mh5q",
       "detail": "direct, CVSS 6.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4633-3j49-mh5q",
       "finding": "next:GHSA-4633-3j49-mh5q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-4c39-4ccg-62r3",
       "detail": "direct, CVSS 6.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c39-4ccg-62r3",
       "finding": "next:GHSA-4c39-4ccg-62r3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-4jqv-mc3x-m676",
       "detail": "direct, CVSS 6.3, fixed in 16.3.8",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4jqv-mc3x-m676",
       "finding": "next:GHSA-4jqv-mc3x-m676",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.1 — GHSA-955p-x3mx-jcvp",
       "detail": "direct, CVSS 6.3, fixed in 16.2.11",
       "path": "docs/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-955p-x3mx-jcvp",
       "finding": "next:GHSA-955p-x3mx-jcvp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.hotker/hotker",
   "version": "1.0.2",
   "slug": "ai-hotker-hotker",
   "scanned_at": "2026-10-16T02:22:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/c2bcom10-ship-it/hotker",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://hotker.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/c2bcom10-ship-it/hotker) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.immopix/mcp",
   "version": "1.0.0",
   "slug": "ai-immopix-mcp",
   "scanned_at": "2026-10-16T02:22:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Immopix/mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "0c0c174709a658a6fc7f3e1a3a2cd74af93b78e9",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://immopix.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 76,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 48 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 2.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 73,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.justdrop/mcp",
   "version": "0.1.6",
   "slug": "ai-justdrop-mcp",
   "scanned_at": "2026-10-16T02:22:09+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Managed-Digital-LLC/justdrop-mcp",
   "package": "npm:justdrop-mcp@0.1.6",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "68d87c34e6085c8bed92d6044b918ac02a842391",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 11,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/core/api.ts",
       "line": 171,
       "excerpt": "/** Uploads an encrypted payload to the GCS signed URL minted by requestUpload. */\nexport async function putToSignedUrl(signedUrl: string, payload: Uint8Array): Promise<void> {\n  const res = await fetch(signedUrl, {\n    method: \"PUT\",\n    headers: { \"Content-Type\": \"application/octet-stream\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/core/session.ts",
       "line": 146,
       "excerpt": "    const { downloadURL, fileData } = await this.api.download(this.roomCode, fileId);\n\n    const res = await fetch(downloadURL);\n    if (!res.ok) throw new Error(`Encrypted download failed (${res.status})`);\n    const payload = new Uint8Array(await res.arrayBuffer());",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/core/sse.ts",
       "line": 34,
       "excerpt": "  while (!signal.aborted) {\n    try {\n      const res = await fetch(url, {\n        headers: { Accept: \"text/event-stream\" },\n        signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 88 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.kanonik/kanonik",
   "version": "1.0.0",
   "slug": "ai-kanonik-kanonik",
   "scanned_at": "2026-10-16T02:22:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Kanonik-LLC/kanonik-plugin",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "6ea449829198b3e5bd708c38e2da06ce24acf82f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://app.kanonik.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 44 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.kavel/kavel-mcp",
   "version": "0.2.0",
   "slug": "ai-kavel-kavel-mcp",
   "scanned_at": "2026-10-16T02:22:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/hanshs474/kavel-mcp",
   "package": "npm:kavel-mcp@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "df26c946fec952e7438f8ff6d51209a4b0b6e6ca",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 0.2.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.kavel.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 4 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 14 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.keenable/web-search",
   "version": "0.1.2",
   "slug": "ai-keenable-web-search",
   "scanned_at": "2026-10-16T02:22:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/keenableai/keenable-mcp",
   "package": "npm:@keenable/mcp@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) X-API-Key that are not required on every declared endpoint, and the source we fetched shows no enforcement — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://api.keenable.ai/mcp?keenable_title=mcp-registry",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.keenable.ai/mcp?keenable_title=mcp-registry; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:83",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 82,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 3.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.klavis/strata",
   "version": "1.0.0",
   "slug": "ai-klavis-strata",
   "scanned_at": "2026-10-16T02:22:21+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Klavis-AI/klavis",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "45c9f7da83d1cf43f7429b96f9c8e8153542ea1e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1286,
   "files_pruned": 2,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 8,
     "reason": "2 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 6 files could not be parsed and were not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 27,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "mcp_servers/12306/src/index.ts",
       "line": 1458,
       "excerpt": "        throw new Error('Error: get station name js file failed.');\n    }\n    const rawData = eval(stationNameJS.replace('var station_names =', ''));\n    const stationsData = parseStationsData(rawData);\n    // 加上缺失的车站信息",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "mcp_servers/local/terminal/src/cli_mcp_server/server.py",
       "line": 344,
       "excerpt": "            if use_shell:\n                # For commands with shell operators, execute with shell=True\n                return subprocess.run(\n                    command,  # command is the full command string in this case\n                    shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "mcp_servers/tavily/tools/extract.py",
       "line": 44,
       "excerpt": "\n    logger.info(f\"tavily_extract: {len(urls)} url(s)\")\n    return client.extract(**{k: v for k, v in params.items() if v is not None})",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/12306/src/index.ts",
       "line": 890,
       "excerpt": "        for (const city of citys.split('|')) {\n            if (!(city in CITY_CODES)) {\n                result[city] = { error: '未检索到城市。' };\n            } else {\n                result[city] = CITY_CODES[city];",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/12306/src/index.ts",
       "line": 892,
       "excerpt": "                result[city] = { error: '未检索到城市。' };\n            } else {\n                result[city] = CITY_CODES[city];\n            }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/12306/src/index.ts",
       "line": 918,
       "excerpt": "                : stationName;\n            if (!(stationName in NAME_STATIONS)) {\n                result[stationName] = { error: '未检索到城市。' };\n            } else {\n                result[stationName] = NAME_STATIONS[stationName];",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/12306/src/index.ts",
       "line": 920,
       "excerpt": "                result[stationName] = { error: '未检索到城市。' };\n            } else {\n                result[stationName] = NAME_STATIONS[stationName];\n            }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/hugging_face/packages/app/src/server/utils/mcp-api-client.ts",
       "line": 164,
       "excerpt": "\t\tconst toolStates: Record<string, boolean> = {};\n\t\tfor (const toolId of ALL_BUILTIN_TOOL_IDS) {\n\t\t\ttoolStates[toolId] = settings.builtInTools.includes(toolId);\n\t\t}\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/hugging_face/packages/app/src/server/utils/mcp-api-client.ts",
       "line": 171,
       "excerpt": "\t\tfor (const id of settings.builtInTools) {\n\t\t\tif (!(id in toolStates)) {\n\t\t\t\ttoolStates[id] = true;\n\t\t\t}\n\t\t}",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/notion_atlas/src/openapi-mcp-server/client/http-client.ts",
       "line": 141,
       "excerpt": "      for (const key in bodyParams) {\n        if (bodyParams[key] !== undefined) {\n          urlParameters[key] = bodyParams[key]\n          delete bodyParams[key]\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/notion_mcpmark/src/openapi-mcp-server/client/http-client.ts",
       "line": 148,
       "excerpt": "      for (const key in bodyParams) {\n        if (bodyParams[key] !== undefined) {\n          urlParameters[key] = bodyParams[key]\n          delete bodyParams[key]\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/notion_official/src/openapi-mcp-server/client/http-client.ts",
       "line": 141,
       "excerpt": "      for (const key in bodyParams) {\n        if (bodyParams[key] !== undefined) {\n          urlParameters[key] = bodyParams[key]\n          delete bodyParams[key]\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/notion_toolathlon/src/openapi-mcp-server/client/http-client.ts",
       "line": 161,
       "excerpt": "      for (const key in bodyParams) {\n        if (bodyParams[key] !== undefined) {\n          urlParameters[key] = bodyParams[key]\n          delete bodyParams[key]\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/youtube_toolathlon/src/functions/content/translations.ts",
       "line": 85,
       "excerpt": "          const [translation] = await this.translate.translate(track.data, lang);\n          if (!results[lang]) {\n            results[lang] = [];\n          }\n          results[lang].push(translation);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/youtube_toolathlon/src/functions/content/translations.ts",
       "line": 138,
       "excerpt": "\n      for (const lang of targetLanguages) {\n        translations[lang] = {};\n        const snippet = video.data.items[0].snippet;\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/youtube_toolathlon/src/functions/content/translations.ts",
       "line": 154,
       "excerpt": "            if (content) {\n              const [translation] = await this.translate.translate(content, lang);\n              translations[lang][field] = translation;\n            }\n          }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp_servers/youtube_toolathlon/src/utils/dataUtils.ts",
       "line": 26,
       "excerpt": "    for (const key in cleaned) {\n      if (typeof cleaned[key] === 'object' && cleaned[key] !== null) {\n        cleaned[key] = removeThumbnails(cleaned[key]);\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "examples/openai-klavis/strata-python/requests_main.py",
       "line": 29,
       "excerpt": "        url = f\"{self.base_url}/mcp-server/strata/create\"\n        payload = {\"userId\": user_id, \"servers\": servers}\n        response = requests.post(url, headers=self.headers, json=payload)\n        response.raise_for_status()\n        return response.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "examples/openai-klavis/strata-python/requests_main.py",
       "line": 37,
       "excerpt": "        url = f\"{self.base_url}/mcp-server/list-tools\"\n        payload = {\"serverUrl\": server_url, \"format\": format}\n        response = requests.post(url, headers=self.headers, json=payload)\n        response.raise_for_status()\n        return response.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "examples/openai-klavis/strata-python/requests_main.py",
       "line": 45,
       "excerpt": "        url = f\"{self.base_url}/mcp-server/call-tool\"\n        payload = {\"serverUrl\": server_url, \"toolName\": tool_name, \"toolArgs\": tool_args}\n        response = requests.post(url, headers=self.headers, json=payload)\n        response.raise_for_status()\n        return response.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "examples/openai-klavis/strata-python/requests_main.py",
       "line": 168,
       "excerpt": "        }\n        \n        response = requests.post(openai_url, headers=openai_headers, json=payload)\n        response.raise_for_status()\n        response_data = response.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/12306/src/index.ts",
       "line": 775,
       "excerpt": "): Promise<T | null> {\n    try {\n        const response = await axios.get(url + '?' + scheme.toString(), {\n            headers: headers,\n            timeout: 30000,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/attio/index.ts",
       "line": 41,
       "excerpt": "        };\n\n        const response = await fetch(url, {\n            ...options,\n            headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/brave_search_atlas/index.ts",
       "line": 188,
       "excerpt": "  url.searchParams.set('offset', offset.toString());\n\n  const response = await fetch(url, {\n    headers: {\n      'Accept': 'application/json',",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/brave_search_atlas/index.ts",
       "line": 220,
       "excerpt": "  webUrl.searchParams.set('count', Math.min(count, 20).toString());\n\n  const webResponse = await fetch(webUrl, {\n    headers: {\n      'Accept': 'application/json',",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/brave_search_atlas/index.ts",
       "line": 251,
       "excerpt": "  const url = new URL('https://api.search.brave.com/res/v1/local/pois');\n  ids.filter(Boolean).forEach(id => url.searchParams.append('ids', id));\n  const response = await fetch(url, {\n    headers: {\n      'Accept': 'application/json',",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/brave_search_atlas/index.ts",
       "line": 270,
       "excerpt": "  const url = new URL('https://api.search.brave.com/res/v1/local/descriptions');\n  ids.filter(Boolean).forEach(id => url.searchParams.append('ids', id));\n  const response = await fetch(url, {\n    headers: {\n      'Accept': 'application/json',",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/context7/packages/cli/src/utils/github.ts",
       "line": 95,
       "excerpt": "\n    const treeUrl = `${GITHUB_API}/repos/${owner}/${repo}/git/trees/${branch}?recursive=1`;\n    const treeResponse = await fetch(treeUrl, {\n      headers: {\n        Accept: \"application/vnd.github.v3+json\",",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/context7/packages/cli/src/utils/github.ts",
       "line": 119,
       "excerpt": "    for (const item of skillFiles) {\n      const rawUrl = `${GITHUB_RAW}/${owner}/${repo}/${branch}/${item.path}`;\n      const fileResponse = await fetch(rawUrl);\n\n      if (!fileResponse.ok) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/context7/packages/mcp/src/lib/api.ts",
       "line": 61,
       "excerpt": "    const headers = generateHeaders(context);\n\n    const response = await fetch(url, { headers });\n    if (!response.ok) {\n      const errorMessage = await parseErrorResponse(response, context.apiKey);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/context7/packages/mcp/src/lib/api.ts",
       "line": 87,
       "excerpt": "    const headers = generateHeaders(context);\n\n    const response = await fetch(url, { headers });\n    if (!response.ok) {\n      const errorMessage = await parseErrorResponse(response, context.apiKey);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/context7/packages/sdk/src/http/index.ts",
       "line": 155,
       "excerpt": "    for (let i = 0; i <= this.retry.attempts; i++) {\n      try {\n        res = await fetch(url, requestOptions as RequestInit);\n        break;\n      } catch (error_) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/fetch_toolathlon/src/Fetcher.ts",
       "line": 14,
       "excerpt": "  }: RequestPayload): Promise<Response> {\n    try {\n      const response = await fetch(url, {\n        headers: {\n          \"User-Agent\":",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "mcp_servers/freshdesk/tools/base.py",
       "line": 337,
       "excerpt": "            ))\n        elif attachment[\"type\"] == \"url\":\n            file_content = requests.get(attachment[\"content\"]).content\n            file_name = attachment.get(\"name\", gen_random_password(15))\n            resolved_attachments.append((",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "mcp_servers/github_mcpmark/pkg/github/actions.go",
       "line": 750,
       "excerpt": "\tfinish := prof.Start(ctx, \"log_buffer_processing\")\n\n\thttpResp, err := http.Get(logURL) //nolint:gosec\n\tif err != nil {\n\t\treturn \"\", 0, httpResp, fmt.Errorf(\"failed to download logs: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "mcp_servers/github_official/pkg/github/actions.go",
       "line": 876,
       "excerpt": "\tfinish := prof.Start(ctx, \"log_buffer_processing\")\n\n\thttpResp, err := http.Get(logURL) //nolint:gosec\n\tif err != nil {\n\t\treturn \"\", 0, httpResp, fmt.Errorf(\"failed to download logs: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "mcp_servers/github_official/pkg/scopes/fetcher.go",
       "line": 77,
       "excerpt": "\t}\n\n\treq, err := http.NewRequestWithContext(ctx, http.MethodHead, endpoint, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/google_maps/index.ts",
       "line": 350,
       "excerpt": "  url.searchParams.append(\"key\", getApiKey());\n\n  const response = await fetch(url.toString());\n  const data = await response.json() as GeocodeResponse;\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/google_maps/index.ts",
       "line": 381,
       "excerpt": "  url.searchParams.append(\"key\", getApiKey());\n\n  const response = await fetch(url.toString());\n  const data = await response.json() as GeocodeResponse;\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/google_maps/index.ts",
       "line": 423,
       "excerpt": "  }\n\n  const response = await fetch(url.toString());\n  const data = await response.json() as PlacesSearchResponse;\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/google_maps/index.ts",
       "line": 459,
       "excerpt": "  url.searchParams.append(\"key\", getApiKey());\n\n  const response = await fetch(url.toString());\n  const data = await response.json() as PlaceDetailsResponse;\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/google_maps/index.ts",
       "line": 500,
       "excerpt": "  url.searchParams.append(\"key\", getApiKey());\n\n  const response = await fetch(url.toString());\n  const data = await response.json() as DistanceMatrixResponse;\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/google_maps/index.ts",
       "line": 540,
       "excerpt": "  url.searchParams.append(\"key\", getApiKey());\n\n  const response = await fetch(url.toString());\n  const data = await response.json() as ElevationResponse;\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/google_maps/index.ts",
       "line": 579,
       "excerpt": "  url.searchParams.append(\"key\", getApiKey());\n\n  const response = await fetch(url.toString());\n  const data = await response.json() as DirectionsResponse;\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "mcp_servers/google_meet/tools/meet_api.py",
       "line": 41,
       "excerpt": "        \"Accept\": \"application/json\",\n    })\n    with urlopen(req, timeout=15) as resp:\n        data = resp.read().decode(\"utf-8\")\n        return json.loads(data) if data else {}",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/hugging_face/packages/app/src/server/gradio-endpoint-connector.ts",
       "line": 199,
       "excerpt": "\n\t// Fetch schema directly\n\tconst response = await fetch(schemaUrl, {\n\t\tmethod: 'GET',\n\t\theaders,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/hugging_face/packages/app/src/server/gradio-endpoint-connector.ts",
       "line": 430,
       "excerpt": "\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst resp = await fetch(url);\n\t\t\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\t\t\tconst buf = Buffer.from(await resp.arrayBuffer());",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/hugging_face/packages/app/src/server/utils/gradio-discovery.ts",
       "line": 136,
       "excerpt": "\t\t\t}\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\theaders,\n\t\t\t\tsignal: controller.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/hugging_face/packages/app/src/server/utils/gradio-discovery.ts",
       "line": 294,
       "excerpt": "\n\t\ttry {\n\t\t\tconst response = await fetch(schemaUrl, {\n\t\t\t\tmethod: 'GET',\n\t\t\t\theaders,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp_servers/hugging_face/packages/app/src/server/utils/mcp-api-client.ts",
       "line": 108,
       "excerpt": "\t\t\t\t\tconst timeoutId = setTimeout(() => controller.abort(), apiTimeout);\n\t\t\t\t\tlogger.debug(`Fetching external settings from ${this.config.externalUrl} with timeout ${apiTimeout}ms`);\n\t\t\t\t\tconst response = await fetch(this.config.externalUrl, {\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tsignal: controller.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 75,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://strata.klavis.ai/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "GitHub Token at mcp_servers/github_official/pkg/http/middleware/pat_scope_test.go:49; GitHub Token at mcp_servers/github_official/pkg/http/middleware/pat_scope_test.go:69; GitHub Token at mcp_servers/github_official/pkg/http/middleware/token_test.go:42; GitHub Token at mcp_servers/github_official/pkg/http/middleware/token_test.go:84; GitHub Token at mcp_servers/github_official/pkg/http/middleware/token_test.go:101; GitHub Token at mcp_servers/github_official/pkg/http/middleware/token_test.go:118; …and 1314 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "40 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 59,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 137 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 13 issue(s) in the last 6 months: 63.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 260 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "56 vulnerabilities could not be placed in `03` §6's table and are listed but not scored; the dependencies in 63 requirements files (examples/agno-klavis/requirements.txt, examples/claude-klavis/python/requirements.txt, examples/crewai-klavis/python/requirements.txt) were not measured — they pin no exact version, or could not be read whole — so the score covers the 65 lockfiles that were",
     "assessed_weight": "0.49",
     "fault": null,
     "evidence_omitted": 3620,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "unpinned requirements",
       "detail": "1079 vulnerabilities osv-scanner reported at versions it resolved rather than read from a pin (examples/agno-klavis/requirements.txt, examples/claude-klavis/python/requirements.txt, examples/crewai-klavis/python/requirements.txt) are not attributed — nobody pinned those versions, so they say nothing about what this server ships",
       "path": "examples/agno-klavis/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fastmcp 2.10.6 — PYSEC-2026-338",
       "detail": "direct, CVSS 10.0, fixed in 3.2.0",
       "path": "mcp_servers/google_cloud_toolathlon/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-338",
       "finding": "fastmcp:PYSEC-2026-338",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fastmcp 2.11.1 — PYSEC-2026-338",
       "detail": "direct, CVSS 10.0, fixed in 3.2.0",
       "path": "mcp_servers/local/Poste.io/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-338",
       "finding": "fastmcp:PYSEC-2026-338",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fastmcp 2.11.0 — PYSEC-2026-338",
       "detail": "direct, CVSS 10.0, fixed in 3.2.0",
       "path": "mcp_servers/local/excel/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-338",
       "finding": "fastmcp:PYSEC-2026-338",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 45.0.5 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "mcp_servers/google_cloud_toolathlon/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.3 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "mcp_servers/google_sheets_toolathlon/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 45.0.5 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "mcp_servers/local/Poste.io/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 45.0.5 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "mcp_servers/local/excel/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "mcp_servers/youtube_transcript_toolathlon/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.3 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "open-strata/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "gitpython 3.1.45 — PYSEC-2026-2161",
       "detail": "direct, CVSS 9.8, fixed in 3.1.47",
       "path": "mcp_servers/local/git/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2161",
       "finding": "gitpython:PYSEC-2026-2161",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "gitpython 3.1.45 — PYSEC-2026-3786",
       "detail": "direct, CVSS 9.8, fixed in 3.1.59",
       "path": "mcp_servers/local/git/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3786",
       "finding": "gitpython:PYSEC-2026-3786",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyopenssl 24.3.0 — PYSEC-2026-2269",
       "detail": "direct, CVSS 9.8, fixed in 26.0.0",
       "path": "mcp_servers/snowflake_toolathlon/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2269",
       "finding": "pyopenssl:PYSEC-2026-2269",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 4.0.14 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 4.1.0",
       "path": "mcp_servers/context7/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 3.2.4 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 3.2.6",
       "path": "mcp_servers/hugging_face/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 4.0.15 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 4.1.0",
       "path": "mcp_servers/local/filesystem/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 3.1.1 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 3.2.6",
       "path": "mcp_servers/notion_atlas/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 3.1.1 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 3.2.6",
       "path": "mcp_servers/notion_mcpmark/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 3.1.1 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 3.2.6",
       "path": "mcp_servers/notion_official/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 3.1.1 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 3.2.6",
       "path": "mcp_servers/notion_toolathlon/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 3.2.4 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 3.2.6",
       "path": "mcp_servers/supabase/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.1 — GHSA-fjxv-7rqg-78g4",
       "detail": "direct, CVSS 9.4, fixed in 4.0.4",
       "path": "mcp_servers/airtable_atlas/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fjxv-7rqg-78g4",
       "finding": "form-data:GHSA-fjxv-7rqg-78g4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.1 — GHSA-fjxv-7rqg-78g4",
       "detail": "direct, CVSS 9.4, fixed in 4.0.4",
       "path": "mcp_servers/exa_atlas/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fjxv-7rqg-78g4",
       "finding": "form-data:GHSA-fjxv-7rqg-78g4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.2 — GHSA-fjxv-7rqg-78g4",
       "detail": "direct, CVSS 9.4, fixed in 4.0.4",
       "path": "mcp_servers/notion_atlas/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fjxv-7rqg-78g4",
       "finding": "form-data:GHSA-fjxv-7rqg-78g4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.2 — GHSA-fjxv-7rqg-78g4",
       "detail": "direct, CVSS 9.4, fixed in 4.0.4",
       "path": "mcp_servers/notion_toolathlon/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fjxv-7rqg-78g4",
       "finding": "form-data:GHSA-fjxv-7rqg-78g4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.9.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp-clients/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.9.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/arxiv_latex/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.8.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/duckduckgo_atlas/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.9.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/google_cloud_toolathlon/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.10.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/google_meet/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/google_sheets_toolathlon/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.9.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/hubspot/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.10.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/local/Poste.io/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.8.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/local/excel/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.6.2.post1 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/local/git/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.9.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/local/terminal/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.9.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/local/word/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.11.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/onedrive/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.11.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/outlook/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.7.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/scholarly_toolathlon/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/snowflake_toolathlon/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "mcp_servers/youtube_transcript_toolathlon/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.10.0 — PYSEC-2026-4025",
       "detail": "direct, CVSS 9.3, fixed in 4.14.2",
       "path": "open-strata/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mammoth 1.9.0 — PYSEC-2026-1603",
       "detail": "direct, CVSS 9.3, fixed in 1.11.0",
       "path": "mcp-clients/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1603",
       "finding": "mammoth:PYSEC-2026-1603",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "shell-quote 1.8.3 — GHSA-w7jw-789q-3m8p",
       "detail": "direct, CVSS 9.2, fixed in 1.8.4",
       "path": "examples/mastra-klavis/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7jw-789q-3m8p",
       "finding": "shell-quote:GHSA-w7jw-789q-3m8p",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "shell-quote 1.8.3 — GHSA-w7jw-789q-3m8p",
       "detail": "direct, CVSS 9.2, fixed in 1.8.4",
       "path": "mcp_servers/hugging_face/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7jw-789q-3m8p",
       "finding": "shell-quote:GHSA-w7jw-789q-3m8p",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "snowflake-connector-python 3.13.2 — PYSEC-2026-3920",
       "detail": "direct, CVSS 9.2, fixed in 3.18.1",
       "path": "mcp_servers/snowflake_toolathlon/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3920",
       "finding": "snowflake-connector-python:PYSEC-2026-3920",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "aiohttp 3.11.16 — PYSEC-2026-2102",
       "detail": "direct, CVSS 9.1, fixed in 3.13.4",
       "path": "mcp-clients/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2102",
       "finding": "aiohttp:PYSEC-2026-2102",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authlib 1.6.1 — PYSEC-2026-287",
       "detail": "direct, CVSS 9.1, fixed in 1.6.9",
       "path": "mcp_servers/google_cloud_toolathlon/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-287",
       "finding": "authlib:PYSEC-2026-287",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authlib 1.6.1 — PYSEC-2026-287",
       "detail": "direct, CVSS 9.1, fixed in 1.6.9",
       "path": "mcp_servers/local/Poste.io/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-287",
       "finding": "authlib:PYSEC-2026-287",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "mcp_servers/context7/packages/mcp/CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "mcp_servers/context7/SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.knowall/reverie",
   "version": "0.5.3",
   "slug": "ai-knowall-reverie",
   "scanned_at": "2026-10-16T02:24:54+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/knowall-ai/mcp-reverie",
   "package": "npm:@knowall-ai/reverie@0.5.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "cca2c49ed50717b29fe11d11b46b2640effe01f5",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 16,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 88,
     "reason": "scored on the declared repository at version 0.5.3, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/handlers/index.ts",
       "line": 462,
       "excerpt": "              const value = duplicateIdentity?.[key];\n              if (value !== undefined && keepIdentity[key] === undefined) {\n                keepIdentity[key] = value;\n              }\n            }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/handlers/index.ts",
       "line": 760,
       "excerpt": "      const value = row.props[key];\n      if (typeof value === 'string' && value.trim() !== '') {\n        entry[key] = value.trim().toLowerCase();\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/neo4j-client.ts",
       "line": 94,
       "excerpt": "    const obj: { [key: string]: any } = {};\n    for (const key of record.keys) {\n      obj[key as string] = this.convertNestedIntegers(record.get(key));\n    }\n    return obj as T;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/embeddings.ts",
       "line": 80,
       "excerpt": "\n  try {\n    const response = await fetch(url, { ...init, signal: controller.signal, redirect: 'error' });\n\n    if (!response.ok) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:39; Secret Keyword at README.md:216",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 64,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 21 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 352.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 22 day(s) ago (by tags), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.kolens/kolens-mcp",
   "version": "1.0.0",
   "slug": "ai-kolens-kolens-mcp",
   "scanned_at": "2026-10-16T02:25:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mira-gift-hq/KOLAgent",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://kolens.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/mira-gift-hq/KOLAgent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.kubit/mcp-server",
   "version": "1.0.1",
   "slug": "ai-kubit-mcp-server",
   "scanned_at": "2026-10-16T02:25:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Kubit-AI/mcp-server",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "cc4d3d9ec6075949c8f776161f3f9a68fce24bed",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.kubit.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 73 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 31,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "capabilities are described only in vague terms — `03` §7's 30 band, which needs no inference to establish",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.lamdis/exchange",
   "version": "0.1.0",
   "slug": "ai-lamdis-exchange",
   "scanned_at": "2026-10-16T02:25:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/lamdis-ai/lamdis-protocol",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "78aff5f6c93bbfe48bfb07563d818b2ad3a1cca2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 237,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 23,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 16,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-go-shell-exec-interpreter (critical/medium)",
       "detail": "A shell interpreter is invoked with a constructed command string. Go's exec.Command is safe by default precisely because it takes an argument vector; routing through `sh -c` gives that safety away.",
       "path": "node/internal/agent/workspace.go",
       "line": 557,
       "excerpt": "\t\treturn exec.CommandContext(ctx, \"cmd\", \"/c\", line)\n\t}\n\treturn exec.CommandContext(ctx, \"sh\", \"-c\", line)\n}\n",
       "url": "",
       "finding": "mcp-go-shell-exec-interpreter",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly.",
       "path": "node/internal/api/dispatch.go",
       "line": 277,
       "excerpt": "// unchecked that is a request forgery primitive pointed at our own metadata\n// service, and the fact that we require https:// stops none of it — a name can\n// have a TLS certificate and still resolve to 169.254.169.254.\nfunc safeWebhookHost(raw string) error {\n\tu, err := url.Parse(raw)",
       "url": "",
       "finding": "mcp-go-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "integrations/vercel-ai/src/index.ts",
       "line": 119,
       "excerpt": "  for (const k of [\"where\", \"area\", \"instructions\", \"deliverable\", \"skills\", \"attempt_minor\"] as const) {\n    const v = input[k];\n    if (v !== undefined && v !== null && v !== \"\" && !(Array.isArray(v) && v.length === 0)) body[k] = v;\n  }\n  if (input.sandbox ?? true) body.sandbox = true;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "bench/run_gen.py",
       "line": 63,
       "excerpt": "                    image_for(iid), \"sleep\", \"infinity\"], check=True, capture_output=True)\n    containers.add(name)\n    log = open(os.path.join(logdir, iid + \".log\"), \"w\")\n    script = ('source /opt/miniconda3/bin/activate testbed 2>/dev/null; cd /testbed; '\n              'git config --global --add safe.directory /testbed; git config core.fileMode false; '",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "bench/run_gen.py",
       "line": 101,
       "excerpt": "def usage(key):\n    req = urllib.request.Request(\"https://openrouter.ai/api/v1/key\", headers={\"Authorization\": \"Bearer \" + key})\n    return json.load(urllib.request.urlopen(req, timeout=30))[\"data\"][\"usage\"]\n\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "bench/run_gen.py",
       "line": 115,
       "excerpt": "    cfg = {\"model\": model, \"trust\": \"project\", \"unguarded\": True, \"max_tool_calls\": 200,\n           \"max_runs_per_day\": 100000, \"max_fetches_per_day\": 100000, \"max_tokens_per_day\": 1000000000}\n    json.dump(cfg, open(os.path.join(data, \"agent.json\"), \"w\"), indent=2)\n\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "bench/run_gen.py",
       "line": 158,
       "excerpt": "    shutil.rmtree(data, ignore_errors=True)\n    setup_data(model, data)\n    log = open(os.path.join(logdir, inst[\"instance_id\"] + \".log\"), \"w\")\n    # Offline: the score has to come from the repository, not from finding\n    # the upstream fix on the web.",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "brand/mark.py",
       "line": 41,
       "excerpt": "    mono, color = mono.replace('\"0.55\"', f'\"{sw}\"'), color.replace('\"0.55\"', f'\"{sw}\"')\n    tag = \"-small\" if SMALL else \"\"\n    open(f\"lamdis-mark{tag}.svg\",\"w\").write(mono+\"\\n\"); open(f\"lamdis-mark-color{tag}.svg\",\"w\").write(color+\"\\n\")\nprint(vb); print(d); print(faces)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "brand/mark.py",
       "line": 41,
       "excerpt": "    mono, color = mono.replace('\"0.55\"', f'\"{sw}\"'), color.replace('\"0.55\"', f'\"{sw}\"')\n    tag = \"-small\" if SMALL else \"\"\n    open(f\"lamdis-mark{tag}.svg\",\"w\").write(mono+\"\\n\"); open(f\"lamdis-mark-color{tag}.svg\",\"w\").write(color+\"\\n\")\nprint(vb); print(d); print(faces)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "integrations/crewai/lamdis_crewai/_client.py",
       "line": 30,
       "excerpt": "        headers[\"authorization\"] = f\"Bearer {token}\"\n    try:\n        r = httpx.request(method, base_url() + path, json=json, headers=headers, timeout=30.0)\n    except httpx.HTTPError as e:\n        return {\"error\": f\"could not reach the exchange: {e}\", \"http_status\": 0}",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "integrations/langchain/lamdis_langchain/_client.py",
       "line": 30,
       "excerpt": "        headers[\"authorization\"] = f\"Bearer {token}\"\n    try:\n        r = httpx.request(method, base_url() + path, json=json, headers=headers, timeout=30.0)\n    except httpx.HTTPError as e:\n        return {\"error\": f\"could not reach the exchange: {e}\", \"http_status\": 0}",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "integrations/openai-agents/lamdis_openai_agents/_client.py",
       "line": 30,
       "excerpt": "        headers[\"authorization\"] = f\"Bearer {token}\"\n    try:\n        r = httpx.request(method, base_url() + path, json=json, headers=headers, timeout=30.0)\n    except httpx.HTTPError as e:\n        return {\"error\": f\"could not reach the exchange: {e}\", \"http_status\": 0}",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "integrations/vercel-ai/src/index.ts",
       "line": 91,
       "excerpt": "  if (input.skills?.length) body.skills = input.skills;\n  if (input.sandbox) body.sandbox = true;\n  return request(opts, \"POST\", \"/v1/quote\", body);\n}\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "integrations/vercel-ai/src/index.ts",
       "line": 122,
       "excerpt": "  }\n  if (input.sandbox ?? true) body.sandbox = true;\n  return request(opts, \"POST\", \"/v1/tasks\", body);\n}\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "integrations/vercel-ai/src/index.ts",
       "line": 127,
       "excerpt": "/** GET /v1/jobs/{job} with the lbt_ token that came back when it was posted. */\nexport function jobStatus(job: string, token: string, opts: LamdisOptions = {}): Promise<LamdisResult> {\n  return request(opts, \"GET\", `/v1/jobs/${encodeURIComponent(job)}`, undefined, token);\n}\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "integrations/vercel-ai/src/index.ts",
       "line": 132,
       "excerpt": "/** GET /v1/jobs/{job}/receipt: the signed receipt once the job has settled. */\nexport function jobReceipt(job: string, token: string, opts: LamdisOptions = {}): Promise<LamdisResult> {\n  return request(opts, \"GET\", `/v1/jobs/${encodeURIComponent(job)}/receipt`, undefined, token);\n}\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/cmd/lamdis/browser.go",
       "line": 248,
       "excerpt": "\nfunc browserWS(versionURL string) (string, error) {\n\tresp, err := http.Get(versionURL)\n\tif err != nil {\n\t\treturn \"\", err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/cmd/lamdis/browser.go",
       "line": 264,
       "excerpt": "func redeemDeviceCode(host, code string) (string, error) {\n\tbody, _ := json.Marshal(map[string]string{\"code\": code})\n\tresp, err := http.Post(host+\"/app/api/device/redeem\", \"application/json\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn \"\", err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/cmd/lamdis/browser.go",
       "line": 330,
       "excerpt": "\tdeadline := time.Now().Add(d)\n\tfor time.Now().Before(deadline) {\n\t\tif resp, err := http.Get(url); err == nil {\n\t\t\tresp.Body.Close()\n\t\t\treturn nil",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/cmd/lamdis/link.go",
       "line": 73,
       "excerpt": "\tbody, _ := json.Marshal(map[string]string{\"code\": code, \"name\": hostname()})\n\turl := strings.TrimRight(*host, \"/\") + \"/v1/link\"\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", url, bytes.NewReader(body))\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/agent/attach.go",
       "line": 74,
       "excerpt": "\t\treturn nil, fmt.Errorf(\"unknown file\")\n\t}\n\treturn os.ReadFile(filepath.Join(r.DataDir, \"files\", a.ID+ext))\n}\n",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/connect.go",
       "line": 136,
       "excerpt": "func searchRegistry(ctx context.Context, q string) []Candidate {\n\tu := registryBase + \"/v0.1/servers?limit=30&version=latest&search=\" + url.QueryEscape(q)\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", u, nil)\n\tif err != nil {\n\t\treturn nil",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/fetch.go",
       "line": 144,
       "excerpt": "\t\t},\n\t}\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", u.String(), nil)\n\tif err != nil {\n\t\trec.Error = err.Error()",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/model.go",
       "line": 250,
       "excerpt": "\t\treturn Message{}, Usage{}, err\n\t}\n\thr, err := http.NewRequestWithContext(ctx, \"POST\", o.Endpoint(), bytes.NewReader(body))\n\tif err != nil {\n\t\treturn Message{}, Usage{}, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/model.go",
       "line": 413,
       "excerpt": "\t\treturn Message{}, Usage{}, err\n\t}\n\thr, err := http.NewRequestWithContext(ctx, \"POST\", o.Endpoint(), bytes.NewReader(body))\n\tif err != nil {\n\t\treturn Message{}, Usage{}, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/model.go",
       "line": 492,
       "excerpt": "\t\tbase = openRouterURL\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, base+\"/models\", nil)\n\tif err != nil {\n\t\treturn nil, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/model.go",
       "line": 544,
       "excerpt": "\t}\n\tbody, _ := json.Marshal(req)\n\thr, err := http.NewRequestWithContext(ctx, \"POST\", o.Endpoint(), bytes.NewReader(body))\n\tif err != nil {\n\t\treturn \"\", nil, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/oauth.go",
       "line": 64,
       "excerpt": "\t\treturn err\n\t}\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", u, nil)\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/oauth.go",
       "line": 104,
       "excerpt": "\t// OAuth answers 401 and names its metadata in the challenge.\n\tmeta := \"\"\n\treq, _ := http.NewRequestWithContext(ctx, \"POST\", mcpURL, strings.NewReader(`{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{}}`))\n\treq.Header.Set(\"Content-Type\", \"application/json\")\n\treq.Header.Set(\"Accept\", \"application/json, text/event-stream\")",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/oauth.go",
       "line": 205,
       "excerpt": "\t\t\"application_type\":           \"web\",\n\t})\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", o.RegisterURL, strings.NewReader(string(body)))\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/oauth.go",
       "line": 271,
       "excerpt": "\t\tform.Set(\"client_secret\", o.ClientSecret)\n\t}\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", o.TokenURL, strings.NewReader(form.Encode()))\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/agent/provision.go",
       "line": 87,
       "excerpt": "\t\tbody = bytes.NewReader(raw)\n\t}\n\treq, err := http.NewRequestWithContext(ctx, method, p.base()+path, body)\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/anchor/calendar.go",
       "line": 42,
       "excerpt": "// submit posts a 32-byte digest and returns the calendar's timestamp of it.\nfunc (c *calendar) submit(ctx context.Context, base string, digest []byte) (*Timestamp, error) {\n\treq, err := http.NewRequestWithContext(ctx, http.MethodPost,\n\t\tstrings.TrimSuffix(base, \"/\")+\"/digest\", bytes.NewReader(digest))\n\tif err != nil {",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/anchor/calendar.go",
       "line": 58,
       "excerpt": "// get fetches the timestamp of a commitment the calendar was given earlier.\nfunc (c *calendar) get(ctx context.Context, base string, commitment []byte) (*Timestamp, error) {\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet,\n\t\tstrings.TrimSuffix(base, \"/\")+\"/timestamp/\"+hex.EncodeToString(commitment), nil)\n\tif err != nil {",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/api/api.go",
       "line": 143,
       "excerpt": "// FetchNodeInfo returns the principal a node at baseURL identifies as.\nfunc FetchNodeInfo(ctx context.Context, baseURL string) (string, error) {\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, baseURL+\"/v1/node\", nil)\n\tif err != nil {\n\t\treturn \"\", err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/api/api.go",
       "line": 250,
       "excerpt": "\t\treturn err\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodPost, t.BaseURL+path, bytes.NewReader(body))\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/api/auth.go",
       "line": 82,
       "excerpt": "\t\treturn nil, err\n\t}\n\treq, err := http.NewRequest(http.MethodPost, a.endpoint(), bytes.NewReader(body))\n\tif err != nil {\n\t\treturn nil, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/delete_account.go",
       "line": 64,
       "excerpt": "\t// quietly start an empty account under the same name.\n\tos.MkdirAll(filepath.Join(h.Root, \".deleted\"), 0o700)\n\tos.WriteFile(filepath.Join(h.Root, \".deleted\", me.ID), nil, 0o600)\n\th.logf(\"host: account deleted at its owner's request\")\n\twriteJSON(w, map[string]any{\"ok\": true})",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/delete_account.go",
       "line": 106,
       "excerpt": "\th.logf(\"host: report filed on %s in %s\", in.Entry, in.Thread)\n\tos.MkdirAll(filepath.Join(h.Root, \".reports\"), 0o700)\n\tos.WriteFile(filepath.Join(h.Root, \".reports\", in.Entry+\".txt\"), []byte(report), 0o600)\n\tif h.Mail != nil {\n\t\th.Mail.Send(r.Context(), envOrDefault(\"LAMDIS_REPORTS_TO\", \"support@lamdis.ai\"), \"Lamdis report: message \"+in.Entry, report)",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "node/internal/api/dispatch.go",
       "line": 248,
       "excerpt": "\tdefer cancel()\n\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", cap.Webhook, bytes.NewReader(body))\n\tif err != nil {\n\t\treturn false",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/email.go",
       "line": 47,
       "excerpt": "\nfunc (h *Host) accountByEmail(e string) *Account {\n\traw, err := os.ReadFile(filepath.Join(h.emailIndex(), emailKey(e)))\n\tif err != nil {\n\t\treturn nil",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/email.go",
       "line": 170,
       "excerpt": "\t}\n\tos.MkdirAll(h.emailIndex(), 0o700)\n\tos.WriteFile(filepath.Join(h.emailIndex(), emailKey(p.email)), []byte(me.ID), 0o600)\n\tos.WriteFile(filepath.Join(me.Dir, \"email_confirmed\"), []byte(p.email), 0o600)\n\th.promote(me)",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/files.go",
       "line": 115,
       "excerpt": "\tdir := filesDir(a.DataDir)\n\tos.MkdirAll(dir, 0o700)\n\tif err := os.WriteFile(filepath.Join(dir, id+ext), data, 0o600); err != nil {\n\t\twriteStatusJSON(w, http.StatusInternalServerError, map[string]any{\"error\": \"could not keep the file\"})\n\t\treturn",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/files.go",
       "line": 121,
       "excerpt": "\tref := FileRef{ID: id, Name: name, Type: typ, Size: int64(len(data)), URL: a.fileURL(id)}\n\tmeta, _ := json.Marshal(ref)\n\tos.WriteFile(filepath.Join(dir, id+\".json\"), meta, 0o600)\n\twriteJSON(w, ref)\n}",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/files.go",
       "line": 140,
       "excerpt": "\t\t\tcontinue\n\t\t}\n\t\traw, err := os.ReadFile(filepath.Join(filesDir(a.DataDir), id+\".json\"))\n\t\tif err != nil {\n\t\t\tcontinue",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/files.go",
       "line": 175,
       "excerpt": "\t\treturn\n\t}\n\traw, err := os.ReadFile(filepath.Join(filesDir(dataDir), id+\".json\"))\n\tif err != nil {\n\t\thttp.NotFound(w, r)",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/files.go",
       "line": 187,
       "excerpt": "\t\treturn\n\t}\n\tdata, err := os.ReadFile(filepath.Join(filesDir(dataDir), id+ext))\n\tif err != nil {\n\t\thttp.NotFound(w, r)",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/files.go",
       "line": 245,
       "excerpt": "\t}\n\tdir := filesDir(filepath.Join(h.Root, p[0]))\n\traw, err := os.ReadFile(filepath.Join(dir, id+\".json\"))\n\tif err != nil {\n\t\treturn nil, err",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/files.go",
       "line": 255,
       "excerpt": "\t\treturn nil, os.ErrNotExist\n\t}\n\treturn os.ReadFile(filepath.Join(dir, id+ext))\n}",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "node/internal/api/guest.go",
       "line": 136,
       "excerpt": "\t\treturn nil, err\n\t}\n\tif err := os.WriteFile(filepath.Join(h.Root, \".by-subject\", accountID(subject)), []byte(guestID), 0o600); err != nil {\n\t\treturn nil, err\n\t}",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source reads a credential header but no enforcing middleware or rejection path was found — `03` §4's \"present but optional or trivially bypassable\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://exchange.lamdis.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 23 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Basic Auth Credentials, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Basic Auth Credentials at bench/sample50.json:1; Secret Keyword at node/cmd/lamdis/review.go:137; Secret Keyword at node/internal/account/account.go:159; Secret Keyword at node/internal/agent/connect_test.go:21; Secret Keyword at node/internal/agent/connect_test.go:33; Hex High Entropy String at node/internal/agent/connect_test.go:41; Secret Keyword at node/internal/agent/oauth.go:191; Secret Keyword at node/internal/agent/provision.go:130; Secret Keyword at node/internal/agent/provision_test.go:45; Basic Auth Credentials at node/internal/agent/runner_test.go:288; …and 13 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 7 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 7 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 30,
     "reason": "1 vulnerability could not be placed in `03` §6's table and is listed but not scored",
     "assessed_weight": "0.91",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "vitest 2.1.9 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 3.2.6",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tinypool 1.1.1 — GHSA-5gmw-xhrv-c9v3",
       "detail": "transitive, CVSS 9.5, fixed in 2.1.1",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5gmw-xhrv-c9v3",
       "finding": "tinypool:GHSA-5gmw-xhrv-c9v3",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tinypool 1.1.1 — GHSA-85c8-ppgw-ccpr",
       "detail": "transitive, CVSS 9.5, fixed in 2.1.2",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-85c8-ppgw-ccpr",
       "finding": "tinypool:GHSA-85c8-ppgw-ccpr",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-fx2h-pf6j-xcff",
       "detail": "transitive, CVSS 8.2, fixed in 6.4.3",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 2.1.9 — GHSA-82fw-gwwq-j7x9",
       "detail": "direct, CVSS 5.9, fixed in 4.1.11",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "vitest:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-4w7w-66w2-5vf9",
       "detail": "transitive, CVSS 6.3, fixed in 6.4.2",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4w7w-66w2-5vf9",
       "finding": "vite:GHSA-4w7w-66w2-5vf9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@vitest/mocker 2.1.9 — GHSA-82fw-gwwq-j7x9",
       "detail": "transitive, CVSS 5.9, fixed in 4.1.11",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "@vitest/mocker:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-v6wh-96g9-6wx3",
       "detail": "transitive, CVSS 5.5, fixed in 6.4.3",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v6wh-96g9-6wx3",
       "finding": "vite:GHSA-v6wh-96g9-6wx3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.21.5 — GHSA-67mh-4wv8-2f99",
       "detail": "transitive, CVSS 5.3, fixed in 0.25.0",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-67mh-4wv8-2f99",
       "finding": "esbuild:GHSA-67mh-4wv8-2f99",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.27.7 — GHSA-g7r4-m6w7-qqqr",
       "detail": "transitive, CVSS 2.5, fixed in 0.28.1",
       "path": "sdk/typescript/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g7r4-m6w7-qqqr",
       "finding": "esbuild:GHSA-g7r4-m6w7-qqqr",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "golang.org/x/crypto 0.57.0 — GO-2026-5932",
       "detail": "transitive, no CVSS published",
       "path": "node/go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5932",
       "finding": "golang.org/x/crypto:GO-2026-5932",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.lateos/soar-record-gateway",
   "version": "1.0.0",
   "slug": "ai-lateos-soar-record-gateway",
   "scanned_at": "2026-10-16T02:25:12+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/lateos-ai/website",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://soar-api.nevada-f99.workers.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/lateos-ai/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.latticenet/latticenet",
   "version": "1.0.0",
   "slug": "ai-latticenet-latticenet",
   "scanned_at": "2026-10-16T02:25:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/joshholly/latticenet-agent",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "972ae1199baa8250e087bb19862ca5e201ef3605",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://latticenet.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at SKILL.md:77; Secret Keyword at api.md:200",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 54 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.lattiq/x402-trading-signals",
   "version": "1.0.0",
   "slug": "ai-lattiq-x402-trading-signals",
   "scanned_at": "2026-10-16T02:25:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/PoopsDavis/lattiq-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) X-PAYMENT that are not required on every declared endpoint — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://api.lattiq.ai/mcp",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.lattiq.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/PoopsDavis/lattiq-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.law.mcp/lawyer-search",
   "version": "0.2.3",
   "slug": "ai-law-mcp-lawyer-search",
   "scanned_at": "2026-10-16T02:25:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/risk-ai/lawai-mcp-server",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "6267b2f510ac06a7f414575f8c0250c2c197ed5e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 9,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (auth middleware) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.law.ai; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (MCP_API_KEYS, MCP_DB_PASSWORD, MCP_MASTER_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "14 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 140 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (3 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 34,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-88fw-hqm2-52qc",
       "detail": "transitive, CVSS 7.1, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88fw-hqm2-52qc",
       "finding": "hono:GHSA-88fw-hqm2-52qc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-9vqf-7f2p-gf9v",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9vqf-7f2p-gf9v",
       "finding": "hono:GHSA-9vqf-7f2p-gf9v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-gqvv-2mrq-wpjv",
       "detail": "transitive, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-hvrm-45r6-mjfj",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hvrm-45r6-mjfj",
       "finding": "hono:GHSA-hvrm-45r6-mjfj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-rv63-4mwf-qqc2",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rv63-4mwf-qqc2",
       "finding": "hono:GHSA-rv63-4mwf-qqc2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-w62v-xxxg-mg59",
       "detail": "transitive, CVSS 6.1, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w62v-xxxg-mg59",
       "finding": "hono:GHSA-w62v-xxxg-mg59",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@hono/node-server 1.19.14 — GHSA-frvp-7c67-39w9",
       "detail": "transitive, CVSS 5.9, fixed in 1.19.15",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-frvp-7c67-39w9",
       "finding": "@hono/node-server:GHSA-frvp-7c67-39w9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-crvj-82cr-hjcx",
       "detail": "transitive, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-wwfh-h76j-fc44",
       "detail": "transitive, CVSS 5.9, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wwfh-h76j-fc44",
       "finding": "hono:GHSA-wwfh-h76j-fc44",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-2gcr-mfcq-wcc3",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2gcr-mfcq-wcc3",
       "finding": "hono:GHSA-2gcr-mfcq-wcc3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-54fx-42gc-7vw4",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-8j4g-w8fx-2239",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-g6gw-c38x-mqfc",
       "detail": "transitive, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-j6c9-x7qj-28xf",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6c9-x7qj-28xf",
       "finding": "hono:GHSA-j6c9-x7qj-28xf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-p77w-8qqv-26rm",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p77w-8qqv-26rm",
       "finding": "hono:GHSA-p77w-8qqv-26rm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-xrhx-7g5j-rcj5",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xrhx-7g5j-rcj5",
       "finding": "hono:GHSA-xrhx-7g5j-rcj5",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-v2v4-37r5-5v8g",
       "detail": "transitive, CVSS 5.3, fixed in 10.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2v4-37r5-5v8g",
       "finding": "ip-address:GHSA-v2v4-37r5-5v8g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-f23p-vx2j-j53r",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-f577-qrjj-4474",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f577-qrjj-4474",
       "finding": "hono:GHSA-f577-qrjj-4474",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-wgpf-jwqj-8h8p",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wgpf-jwqj-8h8p",
       "finding": "hono:GHSA-wgpf-jwqj-8h8p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-xgm2-5f3f-mvvc",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xgm2-5f3f-mvvc",
       "finding": "hono:GHSA-xgm2-5f3f-mvvc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-69xw-7hcm-h432",
       "detail": "transitive, CVSS 4.7, fixed in 4.12.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-69xw-7hcm-h432",
       "finding": "hono:GHSA-69xw-7hcm-h432",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-hxh3-vqpv-xpqv",
       "detail": "transitive, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-3hrh-pfw6-9m5x",
       "detail": "transitive, CVSS 4.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3hrh-pfw6-9m5x",
       "finding": "hono:GHSA-3hrh-pfw6-9m5x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-qp7p-654g-cw7p",
       "detail": "transitive, CVSS 4.3, fixed in 4.12.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qp7p-654g-cw7p",
       "finding": "hono:GHSA-qp7p-654g-cw7p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-hm8q-7f3q-5f36",
       "detail": "transitive, CVSS 3.8, fixed in 4.12.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hm8q-7f3q-5f36",
       "finding": "hono:GHSA-hm8q-7f3q-5f36",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 2.2.2 — GHSA-v422-hmwv-36x6",
       "detail": "transitive, CVSS 3.7, fixed in 2.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v422-hmwv-36x6",
       "finding": "body-parser:GHSA-v422-hmwv-36x6",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.15 — GHSA-79qm-7rj5-m7r9",
       "detail": "transitive, CVSS 3.7, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-79qm-7rj5-m7r9",
       "finding": "hono:GHSA-79qm-7rj5-m7r9",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.27.7 — GHSA-g7r4-m6w7-qqqr",
       "detail": "transitive, CVSS 2.5, fixed in 0.28.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g7r4-m6w7-qqqr",
       "finding": "esbuild:GHSA-g7r4-m6w7-qqqr",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.levelfour/levelfour-mcp",
   "version": "1.0.0",
   "slug": "ai-levelfour-levelfour-mcp",
   "scanned_at": "2026-10-16T02:25:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/LevelFourAI/levelfour-api",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.levelfour.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/LevelFourAI/levelfour-api) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.limitguard.api/trust-intelligence",
   "version": "2.9.1",
   "slug": "ai-limitguard-api-trust-intelligence",
   "scanned_at": "2026-10-11T02:26:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/jwconsultancyteam/limitguard-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "836aa64c184ccc451ba0e62cb63c581506dba3c1",
   "registry_state": "delisted",
   "registry_note": "The registry no longer lists this server (last checked 2026-10-16). This page is kept because its URL is public; the scores below are from the last scan taken while the server was listed, on 2026-10-11, and have not been recomputed, because there is no current entry to scan.",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/off-argv-login.py",
       "line": 308,
       "excerpt": "                        # material has left the machine, so from here the\n                        # /proc-visible copies can go.\n                        with open(f\"/proc/{pid}/mem\", \"r+b\", buffering=0) as mem:\n                            scrubbed = scrub_stack(\n                                mem, stack_ranges(pid), needle",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.limitguard.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at .github/workflows/release.yml:44",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "10 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 81,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-11",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 15.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.lithtrix/lithtrix-mcp",
   "version": "0.20.2",
   "slug": "ai-lithtrix-lithtrix-mcp",
   "scanned_at": "2026-10-16T02:25:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/lithtrix/lithtrix-mcp",
   "package": "npm:lithtrix-mcp@0.20.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 18,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 78,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/stage1-clean-context.mjs",
       "line": 21,
       "excerpt": "\nasync function json(url, options = {}) {\n  const res = await fetch(url, options);\n  const body = await res.json().catch(() => ({}));\n  return { ok: res.ok, status: res.status, body };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/blobs.js",
       "line": 179,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          method: \"PUT\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/blobs.js",
       "line": 206,
       "excerpt": "      let response;\n      try {\n        response = await fetch(new URL(path, LITHTRIX_API_URL), {\n          headers: {\n            Authorization: `Bearer ${apiKey}`,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/blobs.js",
       "line": 242,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          headers: { Authorization: `Bearer ${apiKey}` },\n        });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/blobs.js",
       "line": 263,
       "excerpt": "      let response;\n      try {\n        response = await fetch(new URL(path, LITHTRIX_API_URL), {\n          headers: { Authorization: `Bearer ${apiKey}` },\n        });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/blobs.js",
       "line": 284,
       "excerpt": "      let response;\n      try {\n        response = await fetch(new URL(path, LITHTRIX_API_URL), {\n          method: \"DELETE\",\n          headers: { Authorization: `Bearer ${apiKey}` },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/blobs.js",
       "line": 322,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          headers: { Authorization: `Bearer ${apiKey}` },\n        });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/browse.js",
       "line": 52,
       "excerpt": "      let response;\n      try {\n        response = await fetch(reqUrl.toString(), {\n          method: \"POST\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/commons.js",
       "line": 56,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          headers: {\n            Authorization: `Bearer ${apiKey}`,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/feedback.js",
       "line": 59,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          method: \"POST\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/feedback.js",
       "line": 153,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          method: \"POST\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/feedback.js",
       "line": 228,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          method: \"POST\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/keys.js",
       "line": 21,
       "excerpt": "  let response;\n  try {\n    response = await fetch(url, options);\n  } catch (err) {\n    return {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/keys.js",
       "line": 214,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url, {\n          method: \"DELETE\",\n          headers: { Authorization: `Bearer ${apiKey}`, Accept: \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/memory.js",
       "line": 127,
       "excerpt": "      let response;\n      try {\n        response = await fetch(new URL(path, LITHTRIX_API_URL), {\n          method: \"PUT\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/memory.js",
       "line": 155,
       "excerpt": "      let response;\n      try {\n        response = await fetch(new URL(path, LITHTRIX_API_URL), {\n          headers: {\n            Authorization: `Bearer ${apiKey}`,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/memory.js",
       "line": 207,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          headers: {\n            Authorization: `Bearer ${apiKey}`,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/memory.js",
       "line": 244,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          headers: {\n            Authorization: `Bearer ${apiKey}`,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/parse.js",
       "line": 111,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          method: \"POST\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/parse.js",
       "line": 140,
       "excerpt": "      let response;\n      try {\n        response = await fetch(new URL(path, LITHTRIX_API_URL), {\n          headers: { Authorization: `Bearer ${apiKey}` },\n        });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/parse.js",
       "line": 174,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          headers: { Authorization: `Bearer ${apiKey}` },\n        });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/passport.js",
       "line": 13,
       "excerpt": "  let response;\n  try {\n    response = await fetch(url, options);\n  } catch (err) {\n    return {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/search.js",
       "line": 57,
       "excerpt": "      let response;\n      try {\n        response = await fetch(url.toString(), {\n          headers: {\n            Authorization: `Bearer ${apiKey}`,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/swarm.js",
       "line": 39,
       "excerpt": "  let response;\n  try {\n    response = await fetch(url, options);\n  } catch (err) {\n    return { ok: false, network: true, body: { message: err.message } };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 76,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Private Key at tools/swarm.js:69; …and 1 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "43 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 118 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.lucasandersen/mlp-tax",
   "version": "1.0.0",
   "slug": "ai-lucasandersen-mlp-tax",
   "scanned_at": "2026-10-16T02:25:22+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/luc253/lucasandersen-ai",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.lucasandersen.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/luc253/lucasandersen-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.lumify/sports-intelligence",
   "version": "1.0.1",
   "slug": "ai-lumify-sports-intelligence",
   "scanned_at": "2026-10-16T02:25:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/lumifyai/lumify",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f43af0fb7e782bf10cde703500c318e620ae20c4",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 60,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "clients/lumify-sdk-python/lumify/_transport.py",
       "line": 72,
       "excerpt": "\n    try:\n        resp = urllib.request.urlopen(request, timeout=timeout)\n    except urllib.error.HTTPError as exc:\n        # A real HTTP response with a non-2xx status — read it and let the",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "clients/lumify-sdk-python/lumify/sse.py",
       "line": 126,
       "excerpt": "    )\n    try:\n        return urllib.request.urlopen(request, timeout=read_timeout)\n    except urllib.error.HTTPError as exc:\n        body = exc.read().decode(\"utf-8\", \"replace\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://lumify.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 36 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:28; Secret Keyword at README.md:102; Secret Keyword at clients/crewai-lumify/tests/test_connection_config.py:186; Secret Keyword at clients/langchain-lumify/README.md:61; Secret Keyword at clients/langchain-lumify/tests/test_connection_config.py:188; Secret Keyword at clients/llamaindex-lumify/README.md:62; Secret Keyword at clients/llamaindex-lumify/docs/lumify.md:42; Secret Keyword at clients/llamaindex-lumify/tests/test_connection_config.py:209; Secret Keyword at clients/lumify-mcp/README.md:77; Secret Keyword at clients/lumify-sdk-python/tests/test_async_client.py:131; …and 26 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 76,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 43 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 3.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 6 day(s) ago (by tags), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 46,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "examples/scoreboard/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.4 — GHSA-hmw2-7cc7-3qxx",
       "detail": "transitive, CVSS 8.7, fixed in 4.0.6",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "lodash 4.17.23 — GHSA-r5fr-rjxr-66jc",
       "detail": "transitive, CVSS 8.1, fixed in 4.18.0",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r5fr-rjxr-66jc",
       "finding": "lodash:GHSA-r5fr-rjxr-66jc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.16 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.2 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.5",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.16 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.2 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.3",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.8",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.16 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.2 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.6",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.16 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.2 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.4",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.9",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.3.0 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.3.0 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 10.0.0 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "lodash 4.17.23 — GHSA-f23m-r3pf-42rh",
       "detail": "transitive, CVSS 6.5, fixed in 4.18.0",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23m-r3pf-42rh",
       "finding": "lodash:GHSA-f23m-r3pf-42rh",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "examples/scoreboard/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "examples/scoreboard/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.16 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.21",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.2 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 2.1.7",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.7 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 5.0.12",
       "path": "clients/n8n-nodes-lumify/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mafdet/mcp",
   "version": "1.4.32",
   "slug": "ai-mafdet-mcp",
   "scanned_at": "2026-10-16T02:25:30+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "npm:@mafdet/mcp@1.4.32",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (12 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:69",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.magicinsights/insights",
   "version": "0.1.1",
   "slug": "ai-magicinsights-insights",
   "scanned_at": "2026-10-16T02:25:31+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/andrewchmr/magic-insights-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "0f2cc6bd544fdf16efee723e664fd74a13db788a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://app.magicinsights.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 113 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mailjunky/mcp",
   "version": "0.1.0",
   "slug": "ai-mailjunky-mcp",
   "scanned_at": "2026-10-16T02:25:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/TheNightProject/tnp.web.mailjunky.ai",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "sse",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.mailjunky.ai/sse; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/TheNightProject/tnp.web.mailjunky.ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mailmcp/mailmcp",
   "version": "0.13.12",
   "slug": "ai-mailmcp-mailmcp",
   "scanned_at": "2026-10-16T02:25:33+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/kojott/mailmcp-dist",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "45ab8e46309a15664b368dab5e9ccf5fb1b7c3ab",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mailmcp.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 40 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Basic Auth Credentials, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Basic Auth Credentials at .env.example:65; Secret Keyword at dist/node.js:7; Secret Keyword at dist/node.js:158; Base64 High Entropy String at dist/node.js:229; Secret Keyword at dist/node.js:348; Base64 High Entropy String at dist/node.js:368; Base64 High Entropy String at dist/node.js:368; Base64 High Entropy String at dist/node.js:459; Base64 High Entropy String at dist/node.js:459; Base64 High Entropy String at dist/node.js:459; …and 30 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 5.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 5 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.makerportal/compute",
   "version": "0.1.1",
   "slug": "ai-makerportal-compute",
   "scanned_at": "2026-10-16T02:25:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "npm:@makerportal/mcp@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://makerportal.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mangii/manga",
   "version": "1.4.0",
   "slug": "ai-mangii-manga",
   "scanned_at": "2026-10-16T02:25:45+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/AAAIStudio/mangii-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "99f770fba7ea41b1b1e717c31b2ba24cc60cf2f3",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.mangii.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:60",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 66,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 54 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 7.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.marchward/mcp-server",
   "version": "0.2.4",
   "slug": "ai-marchward-mcp-server",
   "scanned_at": "2026-10-16T02:25:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/marchward/marchward",
   "package": "npm:@marchward/mcp-server@0.2.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:38",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "1 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 107 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.marketcore/mcp",
   "version": "1.0.4",
   "slug": "ai-marketcore-mcp",
   "scanned_at": "2026-10-16T02:25:49+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/ccromp/marcora-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "5619ef6fec1cc2473d19436c8bc7c413e3bcedf9",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.marcora.ai/, https://mcp.marcora.ai/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at server.json:18",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 69,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 61.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 4 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 73,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "docs/changelog.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "docs/security.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.marketintell/marketintell",
   "version": "0.3.1",
   "slug": "ai-marketintell-marketintell",
   "scanned_at": "2026-10-16T02:25:52+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/ravidsrk/marketintell",
   "package": "npm:marketintell@0.2.1",
   "source_state": "unreachable",
   "source_subject": "package",
   "source_reason": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) X-API-Key that are not required on every declared endpoint — `03` §4's \"authentication present but optional\" band; 2 of 2 declared remote endpoint(s) require no credential header: https://api.marketintell.ai/mcp, https://api.marketintell.ai/mcp/sse",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.marketintell.ai/mcp, https://api.marketintell.ai/mcp/sse; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the package this server declares (npm:marketintell@0.2.1) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.markettrace/agent-feed",
   "version": "1.9.0",
   "slug": "ai-markettrace-agent-feed",
   "scanned_at": "2026-10-16T02:25:53+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/MarketTrace/markettrace-agent-feed",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "e76ffabeacd2273df9a3f9a2b8f0c80c8e98f240",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "mcp_server.py",
       "line": 37,
       "excerpt": "# from the live server (README §\"Refresh the contract\"); the version here\n# is what the bridge reports in serverInfo.\nwith open(os.path.join(HERE, \"tools.json\"), encoding=\"utf-8\") as fh:\n    _contract = json.load(fh)\nTOOLS = _contract[\"tools\"]",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "mcp_server.py",
       "line": 79,
       "excerpt": "        method=\"POST\",\n    )\n    with urllib.request.urlopen(req, timeout=30) as resp:\n        body = resp.read().decode(\"utf-8\", \"replace\")\n    if resp.headers.get(\"Content-Type\", \"\").startswith(\"text/event-stream\"):",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.markettrace.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 82,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 10 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 41,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.matih/mcp",
   "version": "0.2.1",
   "slug": "ai-matih-mcp",
   "scanned_at": "2026-10-16T02:25:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/matih-labs/matih-mcp",
   "package": "npm:@matihlabs/mcp@0.2.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "8a2ca5d799bdaf3ca7053d81348ac9b10c120a9b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 15,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 0.2.1, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.matih.ai/api/v1/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 102 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 102 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mcpanalytics/analytics",
   "version": "1.0.8",
   "slug": "ai-mcpanalytics-analytics",
   "scanned_at": "2026-10-16T02:25:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/embeddedlayers/mcp-analytics",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "33a3580381095a520cf0e92ad4578af956496ae8",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/check-docs-drift.py",
       "line": 95,
       "excerpt": "        req = urllib.request.Request(\n            url, headers={\"User-Agent\": \"mcp-analytics-docs-drift/1.0\"})\n        with urllib.request.urlopen(req, timeout=20) as r:\n            if r.status != 200:\n                raise RuntimeError(f\"HTTP {r.status}\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcpanalytics.ai/mcp/api-key; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at .github/profile/README.md:41; Secret Keyword at src/index.js:20",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 57,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 39 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 200.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 8 days (by releases), last release 202 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 31,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 5,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.28.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.3.0 — GHSA-j3q9-mxjg-w52f",
       "detail": "transitive, CVSS 7.5, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j3q9-mxjg-w52f",
       "finding": "path-to-regexp:GHSA-j3q9-mxjg-w52f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-88fw-hqm2-52qc",
       "detail": "transitive, CVSS 7.1, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88fw-hqm2-52qc",
       "finding": "hono:GHSA-88fw-hqm2-52qc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-9vqf-7f2p-gf9v",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9vqf-7f2p-gf9v",
       "finding": "hono:GHSA-9vqf-7f2p-gf9v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-gqvv-2mrq-wpjv",
       "detail": "transitive, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-hvrm-45r6-mjfj",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hvrm-45r6-mjfj",
       "finding": "hono:GHSA-hvrm-45r6-mjfj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-rv63-4mwf-qqc2",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rv63-4mwf-qqc2",
       "finding": "hono:GHSA-rv63-4mwf-qqc2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-xpcf-pg52-r92g",
       "detail": "transitive, CVSS 6.3, fixed in 4.12.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xpcf-pg52-r92g",
       "finding": "hono:GHSA-xpcf-pg52-r92g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.0 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.0 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.0 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-w62v-xxxg-mg59",
       "detail": "transitive, CVSS 6.1, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w62v-xxxg-mg59",
       "finding": "hono:GHSA-w62v-xxxg-mg59",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@hono/node-server 1.19.11 — GHSA-frvp-7c67-39w9",
       "detail": "transitive, CVSS 5.9, fixed in 1.19.15",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-frvp-7c67-39w9",
       "finding": "@hono/node-server:GHSA-frvp-7c67-39w9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-crvj-82cr-hjcx",
       "detail": "transitive, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-wwfh-h76j-fc44",
       "detail": "transitive, CVSS 5.9, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wwfh-h76j-fc44",
       "finding": "hono:GHSA-wwfh-h76j-fc44",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-xf4j-xp2r-rqqx",
       "detail": "transitive, CVSS 5.9, fixed in 4.12.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xf4j-xp2r-rqqx",
       "finding": "hono:GHSA-xf4j-xp2r-rqqx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.3.0 — GHSA-27v5-c462-wpq7",
       "detail": "transitive, CVSS 5.9, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-27v5-c462-wpq7",
       "finding": "path-to-regexp:GHSA-27v5-c462-wpq7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@hono/node-server 1.19.11 — GHSA-92pp-h63x-v22m",
       "detail": "transitive, CVSS 5.3, fixed in 1.19.13",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-92pp-h63x-v22m",
       "finding": "@hono/node-server:GHSA-92pp-h63x-v22m",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-26pp-8wgv-hjvm",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26pp-8wgv-hjvm",
       "finding": "hono:GHSA-26pp-8wgv-hjvm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-2gcr-mfcq-wcc3",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2gcr-mfcq-wcc3",
       "finding": "hono:GHSA-2gcr-mfcq-wcc3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-54fx-42gc-7vw4",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-8j4g-w8fx-2239",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-g6gw-c38x-mqfc",
       "detail": "transitive, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-j6c9-x7qj-28xf",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6c9-x7qj-28xf",
       "finding": "hono:GHSA-j6c9-x7qj-28xf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-p77w-8qqv-26rm",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p77w-8qqv-26rm",
       "finding": "hono:GHSA-p77w-8qqv-26rm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-wmmm-f939-6g9c",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wmmm-f939-6g9c",
       "finding": "hono:GHSA-wmmm-f939-6g9c",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-xrhx-7g5j-rcj5",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xrhx-7g5j-rcj5",
       "finding": "hono:GHSA-xrhx-7g5j-rcj5",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-v2v4-37r5-5v8g",
       "detail": "transitive, CVSS 5.3, fixed in 10.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2v4-37r5-5v8g",
       "finding": "ip-address:GHSA-v2v4-37r5-5v8g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-f23p-vx2j-j53r",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-f577-qrjj-4474",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f577-qrjj-4474",
       "finding": "hono:GHSA-f577-qrjj-4474",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-r5rp-j6wh-rvv4",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r5rp-j6wh-rvv4",
       "finding": "hono:GHSA-r5rp-j6wh-rvv4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-wgpf-jwqj-8h8p",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wgpf-jwqj-8h8p",
       "finding": "hono:GHSA-wgpf-jwqj-8h8p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-xgm2-5f3f-mvvc",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xgm2-5f3f-mvvc",
       "finding": "hono:GHSA-xgm2-5f3f-mvvc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-69xw-7hcm-h432",
       "detail": "transitive, CVSS 4.7, fixed in 4.12.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-69xw-7hcm-h432",
       "finding": "hono:GHSA-69xw-7hcm-h432",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-hxh3-vqpv-xpqv",
       "detail": "transitive, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.9 — GHSA-3hrh-pfw6-9m5x",
       "detail": "transitive, CVSS 4.3, fixed in 4.12.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3hrh-pfw6-9m5x",
       "finding": "hono:GHSA-3hrh-pfw6-9m5x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 59,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mcpcap/mcpcap",
   "version": "0.10.0",
   "slug": "ai-mcpcap-mcpcap",
   "scanned_at": "2026-10-16T02:26:05+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/mcpcap/mcpcap",
   "package": "pypi:mcpcap@0.10.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 16,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/mcpcap/modules/base.py",
       "line": 139,
       "excerpt": "\n        try:\n            with requests.get(pcap_url, timeout=60, stream=True) as response:\n                response.raise_for_status()\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at DEPENDENCIES.md:26; Secret Keyword at tests/test_cli.py:185",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 64,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 16 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 120.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 16 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 71,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4177",
       "detail": "transitive, CVSS 8.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4177",
       "finding": "urllib3:PYSEC-2026-4177",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.14.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.2.0 — PYSEC-2026-4013",
       "detail": "transitive, CVSS 7.8, fixed in 21.7.13",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4013",
       "finding": "virtualenv:PYSEC-2026-4013",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.2.0 — PYSEC-2026-4011",
       "detail": "transitive, CVSS 7.7, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4011",
       "finding": "virtualenv:PYSEC-2026-4011",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4175",
       "detail": "transitive, CVSS 7.6, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4175",
       "finding": "urllib3:PYSEC-2026-4175",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.28.1 — GHSA-84m7-p3x7-pcfv",
       "detail": "transitive, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "virtualenv 21.2.0 — PYSEC-2026-4014",
       "detail": "transitive, CVSS 7.3, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4014",
       "finding": "virtualenv:PYSEC-2026-4014",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4176",
       "detail": "transitive, CVSS 6.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4176",
       "finding": "urllib3:PYSEC-2026-4176",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.2.0 — PYSEC-2026-4012",
       "detail": "transitive, CVSS 5.8, fixed in 21.7.11",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4012",
       "finding": "virtualenv:PYSEC-2026-4012",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.14.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "enhancement/CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mcpjunction/directory",
   "version": "1.0.0",
   "slug": "ai-mcpjunction-directory",
   "scanned_at": "2026-10-16T02:26:09+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/rickstek/mcpjunction",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "e31b3f847438eac0336b8e519625aeac1f0c3ffa",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 11,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/pipeline.py",
       "line": 228,
       "excerpt": "        req.add_header(\"Authorization\", f\"Bearer {TOKEN}\")\n    try:\n        with urllib.request.urlopen(req, timeout=45) as resp:\n            return json.loads(resp.read().decode(\"utf-8\"))\n    except urllib.error.HTTPError as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/verify_edge_rules.py",
       "line": 94,
       "excerpt": "    )\n    try:\n        with urllib.request.urlopen(req, timeout=30) as resp:\n            payload = json.loads(resp.read().decode(\"utf-8\"))\n    except urllib.error.HTTPError as exc:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source reads a credential header but no enforcing middleware or rejection path was found — `03` §4's \"present but optional or trivially bypassable\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcpjunction.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1859 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at public/data/mcp_servers.json:55625; Base64 High Entropy String at public/data/mcp_servers.json:62883; Hex High Entropy String at state/lastmod.json:6; Hex High Entropy String at state/lastmod.json:10; Hex High Entropy String at state/lastmod.json:14; Hex High Entropy String at state/lastmod.json:18; Hex High Entropy String at state/lastmod.json:22; Hex High Entropy String at state/lastmod.json:26; Hex High Entropy String at state/lastmod.json:30; Hex High Entropy String at state/lastmod.json:34; …and 1849 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 75,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 9.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 63,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "sharp 0.35.4 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-cache-semantics 4.2.0 — GHSA-ch52-4w7c-c8xp",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ch52-4w7c-c8xp",
       "finding": "http-cache-semantics:GHSA-ch52-4w7c-c8xp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-mcm9-63f2-9j32",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mcm9-63f2-9j32",
       "finding": "devalue:GHSA-mcm9-63f2-9j32",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-r9w8-h9r3-54w4",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r9w8-h9r3-54w4",
       "finding": "devalue:GHSA-r9w8-h9r3-54w4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-x5rw-q4pp-hg5g",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5rw-q4pp-hg5g",
       "finding": "devalue:GHSA-x5rw-q4pp-hg5g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.2 — GHSA-w27v-7q3p-w38r",
       "detail": "transitive, CVSS 8.2, fixed in 4.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w27v-7q3p-w38r",
       "finding": "svgo:GHSA-w27v-7q3p-w38r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-j22f-vq7h-c4qm",
       "detail": "transitive, CVSS 7.5, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j22f-vq7h-c4qm",
       "finding": "devalue:GHSA-j22f-vq7h-c4qm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "transitive, CVSS 7.5, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-vp8m-p9jh-q5pm",
       "detail": "transitive, CVSS 7.4, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vp8m-p9jh-q5pm",
       "finding": "undici:GHSA-vp8m-p9jh-q5pm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-w293-vg96-wgc3",
       "detail": "transitive, CVSS 7.4, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w293-vg96-wgc3",
       "finding": "undici:GHSA-w293-vg96-wgc3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-2jfj-6hjv-fm6j",
       "detail": "transitive, CVSS 6.5, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2jfj-6hjv-fm6j",
       "finding": "undici:GHSA-2jfj-6hjv-fm6j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-4q55-j62x-fr9h",
       "detail": "transitive, CVSS 6.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4q55-j62x-fr9h",
       "finding": "devalue:GHSA-4q55-j62x-fr9h",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-hx4r-w6wj-j8fg",
       "detail": "transitive, CVSS 6.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hx4r-w6wj-j8fg",
       "finding": "devalue:GHSA-hx4r-w6wj-j8fg",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.2 — GHSA-4vpr-x523-8j87",
       "detail": "transitive, CVSS 6.1, fixed in 4.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4vpr-x523-8j87",
       "finding": "svgo:GHSA-4vpr-x523-8j87",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-3wwx-pv8p-q78v",
       "detail": "transitive, CVSS 5.9, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3wwx-pv8p-q78v",
       "finding": "undici:GHSA-3wwx-pv8p-q78v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-3xpg-4rpp-hhhm",
       "detail": "transitive, CVSS 5.9, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3xpg-4rpp-hhhm",
       "finding": "undici:GHSA-3xpg-4rpp-hhhm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-pmjh-fq2x-6v4x",
       "detail": "transitive, CVSS 5.9, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmjh-fq2x-6v4x",
       "finding": "undici:GHSA-pmjh-fq2x-6v4x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-rx4f-c7p8-82vq",
       "detail": "transitive, CVSS 5.9, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rx4f-c7p8-82vq",
       "finding": "undici:GHSA-rx4f-c7p8-82vq",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-9rgm-9g3h-6x36",
       "detail": "transitive, CVSS 5.3, fixed in 5.9.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9rgm-9g3h-6x36",
       "finding": "devalue:GHSA-9rgm-9g3h-6x36",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "smol-toml 1.8.0 — GHSA-r4xh-jqrq-34v2",
       "detail": "transitive, CVSS 5.3, fixed in 1.9.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r4xh-jqrq-34v2",
       "finding": "smol-toml:GHSA-r4xh-jqrq-34v2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-2gqq-gqf2-x968",
       "detail": "transitive, CVSS 3.7, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2gqq-gqf2-x968",
       "finding": "undici:GHSA-2gqq-gqf2-x968",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-8436-99hf-9mmv",
       "detail": "transitive, CVSS 3.7, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8436-99hf-9mmv",
       "finding": "undici:GHSA-8436-99hf-9mmv",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 8.10.0 — GHSA-r53p-7pc4-xj5r",
       "detail": "transitive, CVSS 3.7, fixed in 8.10.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r53p-7pc4-xj5r",
       "finding": "undici:GHSA-r53p-7pc4-xj5r",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-wf3x-273g-mvxv",
       "detail": "transitive, CVSS 2.3, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wf3x-273g-mvxv",
       "finding": "devalue:GHSA-wf3x-273g-mvxv",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.meetlark/mcp-server",
   "version": "1.0.3",
   "slug": "ai-meetlark-mcp-server",
   "scanned_at": "2026-10-16T02:26:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "npm:@meetlark/mcp-server@1.0.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 13,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://meetlark.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "6 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.meetsquad/squad",
   "version": "4.3.1",
   "slug": "ai-meetsquad-squad",
   "scanned_at": "2026-10-16T02:26:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/the-basilisk-ai/squad-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "17c7ab25fbe8743e76df872f56c0c88d0f9eb17e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 63,
   "files_pruned": 2,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "2 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/squad-api-client.ts",
       "line": 50,
       "excerpt": "  }\n\n  const response = await fetch(getSquadGraphqlUrl(), {\n    method: \"POST\",\n    headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.meetsquad.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 535 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at .github/workflows/secret-scan.yml:35; Base64 High Entropy String at pnpm-lock.yaml:99; Base64 High Entropy String at pnpm-lock.yaml:104; Base64 High Entropy String at pnpm-lock.yaml:108; Base64 High Entropy String at pnpm-lock.yaml:112; Base64 High Entropy String at pnpm-lock.yaml:116; Base64 High Entropy String at pnpm-lock.yaml:120; Base64 High Entropy String at pnpm-lock.yaml:124; Base64 High Entropy String at pnpm-lock.yaml:128; Base64 High Entropy String at pnpm-lock.yaml:132; …and 525 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "30 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 81,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 58.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 3 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 86,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@graphql-tools/utils 11.2.0 — GHSA-7mx3-vvmw-hjmv",
       "detail": "transitive, CVSS 8.2, fixed in 12.0.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7mx3-vvmw-hjmv",
       "finding": "@graphql-tools/utils:GHSA-7mx3-vvmw-hjmv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.memcell/memcell",
   "version": "0.8.0",
   "slug": "ai-memcell-memcell",
   "scanned_at": "2026-10-16T02:26:28+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/memcell-ai/cli",
   "package": "npm:memcell@0.8.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "ca14b2a8ecf5f26d33ddecbd9c0286cc17420533",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 84,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/commands/connect.ts",
       "line": 313,
       "excerpt": "  const models: Record<string, string> = {};\n  for (const ag of present) {\n    models[ag] = await resolveModelForAgent(ag, process.cwd());\n  }\n  const activeModel = await resolveModelForAgent(activeAgent, process.cwd());",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/config.ts",
       "line": 96,
       "excerpt": "  let here = tree;\n  for (const part of parts.slice(0, -1)) {\n    if (typeof here[part] !== \"object\" || here[part] === null) here[part] = {};\n    here = here[part] as Tree;\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) Authorization that are not required on every declared endpoint — `03` §4's \"authentication present but optional\" band; 1 of 2 declared remote endpoint(s) require no credential header: https://memcell.ai/mcp/public/{memory}",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://memcell.ai/mcp, https://memcell.ai/mcp/public/{memory}; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 9 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 35.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 16 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.memoket/memoket",
   "version": "1.0.0",
   "slug": "ai-memoket-memoket",
   "scanned_at": "2026-10-16T02:26:33+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/memoket/memoket-backend-go",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.memoket.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/memoket/memoket-backend-go) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mentionagent/mentionagent",
   "version": "1.0.0",
   "slug": "ai-mentionagent-mentionagent",
   "scanned_at": "2026-10-16T02:26:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/BuildsbyMatt/mentionagent-claude-skill",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "6c6d7e9fb4065f7bb1720541fa271f09901350ff",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mentionagent.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 82,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mrmarket/mrmarket-mcp",
   "version": "1.1.0",
   "slug": "ai-mrmarket-mrmarket-mcp",
   "scanned_at": "2026-10-16T02:26:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/codinghaven/mrmarket-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "df706d851969fbc9885a6dc994fb03778027f902",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.mrmarket.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 119 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.mysiren/siren",
   "version": "1.1.0",
   "slug": "ai-mysiren-siren",
   "scanned_at": "2026-10-16T02:26:38+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Hexahedral-Inc/siren-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "d0c16eb8bd5ed9e06e5a9335591cce87c9055d28",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.mysiren.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 13 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.myspaice/spaces",
   "version": "1.10.0",
   "slug": "ai-myspaice-spaces",
   "scanned_at": "2026-10-16T02:26:41+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/neltomw/spaces-mcp-server",
   "package": "npm:spaces-mcp-server@1.10.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "spacesServer.js",
       "line": 833,
       "excerpt": "  if (!PICTURE_HOST_RE.test(u) && !(PICTURE_TEST_BASE && u.startsWith(PICTURE_TEST_BASE))) return null;\n  try {\n    const res = await fetch(u, { signal: AbortSignal.timeout(15000), redirect: 'error' });\n    const mime = String(res.headers.get('content-type') || '').split(';')[0].trim();\n    if (!res.ok || !/^image\\/(png|jpeg|webp|gif)$/.test(mime)) return null;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at spacesServer.js:116",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 84,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 7 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 7 day(s) ago (by tags), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.name/nameai-mcp",
   "version": "1.0.1",
   "slug": "ai-name-nameai-mcp",
   "scanned_at": "2026-10-16T02:26:43+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/namekart/nameai_mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "1f6e7373159f9496c86fcc62bcb429776784748d",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 9,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "sdk-python/src/nameai/__init__.py",
       "line": 105,
       "excerpt": "        request = urllib.request.Request(url, data=data, headers=headers, method=method)\n        try:\n            with urllib.request.urlopen(request, timeout=self.timeout) as response:\n                return response.read().decode(\"utf-8\")\n        except urllib.error.HTTPError as exc:  # non-2xx",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (auth middleware) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.name.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (OAUTH_INTROSPECTION_SECRET) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 74,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 32 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 47,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 2.1.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 2.2.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4143",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4143",
       "finding": "pyjwt:PYSEC-2026-4143",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4150",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4150",
       "finding": "pyjwt:PYSEC-2026-4150",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4151",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4151",
       "finding": "pyjwt:PYSEC-2026-4151",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4142",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4142",
       "finding": "pyjwt:PYSEC-2026-4142",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 19,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "sdk/package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.newzai.api/NewzAI",
   "version": "1.0.2",
   "slug": "ai-newzai-api-newzai",
   "scanned_at": "2026-10-16T02:26:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Gauraviitkgp/news-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "14bba75c2d26c8c3c832aff86d796e033734af53",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.newzai.ai/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 157 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.newzai.api/news-mcp",
   "version": "1.0.0",
   "slug": "ai-newzai-api-news-mcp",
   "scanned_at": "2026-10-16T02:26:49+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Gauraviitkgp/news-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "14bba75c2d26c8c3c832aff86d796e033734af53",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.newzai.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 157 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.nocturnus/logic-server",
   "version": "0.3.11",
   "slug": "ai-nocturnus-logic-server",
   "scanned_at": "2026-10-16T02:26:51+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Auctalis/nocturnusai",
   "package": "npm:nocturnusai-mcp@0.3.11",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (NOCTURNUSAI_API_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 63 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 182 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.novence/mcp",
   "version": "0.1.3",
   "slug": "ai-novence-mcp",
   "scanned_at": "2026-10-16T02:26:53+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Novence-ai/mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "8f1a720ce072d903e12ca5ee5a50bdec74dc90b9",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) Authorization that are not required on every declared endpoint, and the source we fetched shows no enforcement — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://api.novence.ai/mcp",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.novence.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:56; Secret Keyword at SETUP.md:26; Secret Keyword at skills/novence-deploy/SKILL.md:16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 82,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 63,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.30.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.7.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.7.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.7 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.nudg3/brand-intelligence",
   "version": "1.1.0",
   "slug": "ai-nudg3-brand-intelligence",
   "scanned_at": "2026-10-16T02:26:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/NUDG3-AI/nudg3-mcp",
   "package": "pypi:nudg3-mcp@1.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 25,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.nudg3.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 10 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:67; Secret Keyword at README.md:29; Secret Keyword at tests/test_client.py:13; Secret Keyword at tests/test_client_forwarded_for.py:22; Secret Keyword at tests/test_insights_tools.py:17; Secret Keyword at tests/test_middleware.py:107; Secret Keyword at tests/test_middleware.py:118; Secret Keyword at tests/test_middleware.py:130; Secret Keyword at tests/test_tools.py:20; Secret Keyword at tests/test_workspace_resolution.py:27",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "11 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "pyproject.toml declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.onelore/lore",
   "version": "0.2.1",
   "slug": "ai-onelore-lore",
   "scanned_at": "2026-10-16T02:27:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/SolidKeyAB/lore-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.onelore.ai; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/SolidKeyAB/lore-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.oobeprotocol.sap.mcp/sap-mcp",
   "version": "0.7.1",
   "slug": "ai-oobeprotocol-sap-mcp-sap-mcp",
   "scanned_at": "2026-10-16T02:27:02+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/OOBE-PROTOCOL/sap-mcp",
   "package": "npm:@oobe-protocol-labs/sap-mcp-server@0.7.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 3,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "3 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.sap.oobeprotocol.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 24 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at config.example.json:12; Base64 High Entropy String at config.schema.json:42; Base64 High Entropy String at config.secure-example.json:12; Base64 High Entropy String at dist/config/defaults.js:8; Base64 High Entropy String at dist/payments/monetization-gate.js:17; Base64 High Entropy String at dist/payments/monetization-gate.js:18; Base64 High Entropy String at dist/remote/server.js:31; Base64 High Entropy String at dist/remote/server.js:32; Secret Keyword at dist/resources/current/sap-current-config.resource.js:92; Base64 High Entropy String at dist/security/unsafe-action-guard.js:18; …and 14 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 38.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 31 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.openaso/openaso",
   "version": "0.3.0",
   "slug": "ai-openaso-openaso",
   "scanned_at": "2026-10-16T02:27:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/xekor/openaso-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "d07c12be06a51265f474f19f4e1e3d3120711255",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.openaso.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 80 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.orangepro/mcp",
   "version": "0.2.58",
   "slug": "ai-orangepro-mcp",
   "scanned_at": "2026-10-16T02:27:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/OrangeproAI/orangepro-mcp",
   "package": "npm:@orangepro/mcp-server@0.2.58",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 97,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 6 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 0.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 6 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md is under `03` §7's 500-byte floor, which scores 0 regardless of content",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.orchis/nimrod",
   "version": "2.1.0",
   "slug": "ai-orchis-nimrod",
   "scanned_at": "2026-10-16T02:27:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mixelpixx/Nimrod",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "36431f85dfb8d0f4e002ebaefbc8f6d0c2cb63de",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://nimrod.orchis.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 63 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 2.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 13 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.ordercore/ordercore-mcp",
   "version": "0.2.18",
   "slug": "ai-ordercore-ordercore-mcp",
   "scanned_at": "2026-10-16T02:27:11+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "npm:@ordercore/mcp@0.2.18",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.orggen/orggen",
   "version": "1.0.0",
   "slug": "ai-orggen-orggen",
   "scanned_at": "2026-10-16T02:27:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/ms-spown/orgschema-ai",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.orggen.ai/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/ms-spown/orgschema-ai) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.outfitmaker/outfit-assistant",
   "version": "2.0.0",
   "slug": "ai-outfitmaker-outfit-assistant",
   "scanned_at": "2026-10-16T02:27:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/elasistentepepe/outfitmaker-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "0292ff3febde0d82ed055794dabea346d1d279ee",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://outfitmaker.ai/mcp/wardrobe, https://outfitmaker.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 78,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 30 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.outlit/outlit",
   "version": "1.0.0",
   "slug": "ai-outlit-outlit",
   "scanned_at": "2026-10-16T02:27:16+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/OutlitAI/outlit-sdk",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "9f1553137fd869a77f8d621655be70244c658120",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 192,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": ".agents/skills/brainstorming/scripts/server.cjs",
       "line": 540,
       "excerpt": "  // Operator-provided launcher: run as given (this env var is trusted operator input).\n  if (process.env.BRAINSTORM_OPEN_CMD) {\n    try { cp.exec(process.env.BRAINSTORM_OPEN_CMD + ' ' + JSON.stringify(url), () => {}); } catch (e) { /* best effort */ }\n    return;\n  }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "packages/browser/scripts/deploy.ts",
       "line": 123,
       "excerpt": "\n  try {\n    execSync(cmd, { stdio: \"inherit\" })\n    console.log(\"\\n Deployed successfully!\")\n    console.log(`   URL: ${getPublicUrl(gcsPath)}\\n`)",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "packages/browser/scripts/deploy.ts",
       "line": 192,
       "excerpt": "  if (config.environment === \"version\") {\n    try {\n      execSync(`gcloud storage ls \"${getGcsUrl(gcsPath)}\" 2>/dev/null`, {\n        stdio: \"pipe\",\n      })",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "packages/browser/scripts/deploy.ts",
       "line": 192,
       "excerpt": "  if (config.environment === \"version\") {\n    try {\n      execSync(`gcloud storage ls \"${getGcsUrl(gcsPath)}\" 2>/dev/null`, {\n        stdio: \"pipe\",\n      })",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/browser/src/tracker.ts",
       "line": 658,
       "excerpt": "    void (async () => {\n      try {\n        const response = await fetch(buildBootstrapUrl(this.apiHost, this.publicKey), {\n          credentials: \"omit\",\n          signal: controller.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/browser/src/tracker.ts",
       "line": 891,
       "excerpt": "\n      // Fallback to fetch\n      const response = await fetch(url, {\n        method: \"POST\",\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/node/src/transport.ts",
       "line": 69,
       "excerpt": "\n    try {\n      const response = await fetch(url, {\n        method: INGEST_METHOD,\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/sync-outlit-skill.mjs",
       "line": 97,
       "excerpt": "async function upstreamFile(revision, path) {\n  const url = `https://raw.githubusercontent.com/OutlitAI/skills/${revision}/${path}`\n  const response = await fetch(url)\n  if (!response.ok) throw new Error(`Could not fetch ${path}@${revision}: HTTP ${response.status}`)\n  return new TextDecoder(\"utf-8\", { fatal: true }).decode(await response.arrayBuffer())",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.4",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.outlit.ai/mcp, https://mcp.outlit.ai/w/{workspaceSlug}/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 54 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Basic Auth Credentials, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at .agents/skills/typescript-advanced-types/references/details.md:274; Secret Keyword at docs/cli/configuration.mdx:37; Hex High Entropy String at docs/openapi.json:17436; Base64 High Entropy String at docs/outlit.js:8; Hex High Entropy String at docs/skill-source.json:3; Hex High Entropy String at docs/skill-source.json:5; Hex High Entropy String at docs/skill-source.json:6; Hex High Entropy String at docs/skill-source.json:7; Secret Keyword at docs/superpowers/plans/2026-04-30-cli-source-listing.md:619; Secret Keyword at docs/superpowers/plans/2026-04-30-cli-source-listing.md:620; …and 44 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 21.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 54,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "turbo 2.8.10 — GHSA-3qcw-2rhx-2726",
       "detail": "direct, CVSS 9.8, fixed in 2.9.14",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3qcw-2rhx-2726",
       "finding": "turbo:GHSA-3qcw-2rhx-2726",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 4.0.18 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 4.1.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-xq3m-2v4x-88gg",
       "detail": "transitive, CVSS 9.8, fixed in 7.5.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xq3m-2v4x-88gg",
       "finding": "protobufjs:GHSA-xq3m-2v4x-88gg",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@mariozechner/pi-coding-agent 0.67.1 — GHSA-jfgx-wxx8-mp94",
       "detail": "direct, CVSS 7.3",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jfgx-wxx8-mp94",
       "finding": "@mariozechner/pi-coding-agent:GHSA-jfgx-wxx8-mp94",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-xml-builder 1.1.4 — GHSA-5wm8-gmm8-39j9",
       "detail": "transitive, CVSS 8.7, fixed in 1.1.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5wm8-gmm8-39j9",
       "finding": "fast-xml-builder:GHSA-5wm8-gmm8-39j9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "extract-zip 2.0.1 — GHSA-jmr9-qjv8-65gv",
       "detail": "transitive, CVSS 8.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jmr9-qjv8-65gv",
       "finding": "extract-zip:GHSA-jmr9-qjv8-65gv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.2.2 — GHSA-c475-qrg2-pj4r",
       "detail": "transitive, CVSS 8.2, fixed in 6.2.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c475-qrg2-pj4r",
       "finding": "basic-ftp:GHSA-c475-qrg2-pj4r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.1 — GHSA-fx2h-pf6j-xcff",
       "detail": "transitive, CVSS 8.2, fixed in 7.3.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.1 — GHSA-p9ff-h696-f583",
       "detail": "transitive, CVSS 8.2, fixed in 7.3.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p9ff-h696-f583",
       "finding": "vite:GHSA-p9ff-h696-f583",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.1 — GHSA-v2wj-q39q-566r",
       "detail": "transitive, CVSS 8.2, fixed in 7.3.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2wj-q39q-566r",
       "finding": "vite:GHSA-v2wj-q39q-566r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "extract-zip 2.0.1 — GHSA-7pqw-9j4j-h8q3",
       "detail": "transitive, CVSS 8.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7pqw-9j4j-h8q3",
       "finding": "extract-zip:GHSA-7pqw-9j4j-h8q3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-75px-5xx7-5xc7",
       "detail": "transitive, CVSS 8.1, fixed in 7.5.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-75px-5xx7-5xc7",
       "finding": "protobufjs:GHSA-75px-5xx7-5xc7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 5.0.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-66ff-xgx4-vchm",
       "detail": "transitive, CVSS 7.7, fixed in 7.5.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-66ff-xgx4-vchm",
       "finding": "protobufjs:GHSA-66ff-xgx4-vchm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.2.2 — GHSA-rp42-5vxx-qpwr",
       "detail": "transitive, CVSS 7.5, fixed in 5.3.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rp42-5vxx-qpwr",
       "finding": "basic-ftp:GHSA-rp42-5vxx-qpwr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.2.2 — GHSA-rpmf-866q-6p89",
       "detail": "transitive, CVSS 7.5, fixed in 5.3.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpmf-866q-6p89",
       "finding": "basic-ftp:GHSA-rpmf-866q-6p89",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.8",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.9",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "picomatch 2.3.1 — GHSA-c2c7-rcm5-vvqj",
       "detail": "transitive, CVSS 7.5, fixed in 2.3.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c2c7-rcm5-vvqj",
       "finding": "picomatch:GHSA-c2c7-rcm5-vvqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "picomatch 4.0.3 — GHSA-c2c7-rcm5-vvqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.0.4",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c2c7-rcm5-vvqj",
       "finding": "picomatch:GHSA-c2c7-rcm5-vvqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.6 — GHSA-6g55-p6wh-862q",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.12",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.6 — GHSA-r28c-9q8g-f849",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.18",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-685m-2w69-288q",
       "detail": "transitive, CVSS 7.5, fixed in 7.5.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-685m-2w69-288q",
       "finding": "protobufjs:GHSA-685m-2w69-288q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-jvwf-75h9-cwgg",
       "detail": "transitive, CVSS 7.5, fixed in 7.5.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jvwf-75h9-cwgg",
       "finding": "protobufjs:GHSA-jvwf-75h9-cwgg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-wcpc-wj8m-hjx6",
       "detail": "transitive, CVSS 7.5, fixed in 7.6.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wcpc-wj8m-hjx6",
       "finding": "protobufjs:GHSA-wcpc-wj8m-hjx6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.22.0 — GHSA-f269-vfmq-vjvj",
       "detail": "transitive, CVSS 7.5, fixed in 7.24.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f269-vfmq-vjvj",
       "finding": "undici:GHSA-f269-vfmq-vjvj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.22.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "transitive, CVSS 7.5, fixed in 7.29.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.22.0 — GHSA-v9p9-hfj2-hcw8",
       "detail": "transitive, CVSS 7.5, fixed in 7.24.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v9p9-hfj2-hcw8",
       "finding": "undici:GHSA-v9p9-hfj2-hcw8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.22.0 — GHSA-vrm6-8vpv-qv8q",
       "detail": "transitive, CVSS 7.5, fixed in 7.24.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vrm6-8vpv-qv8q",
       "finding": "undici:GHSA-vrm6-8vpv-qv8q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 41,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the only changelog is packages/pi/CHANGELOG.md, inside a nested sub-project with its own package manifest — it describes that project, and whether it also covers this server cannot be told from the tree",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.outset/mcp",
   "version": "1.0.0",
   "slug": "ai-outset-mcp",
   "scanned_at": "2026-10-16T02:27:27+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Outset-AI/outset-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "e0f0ac718e31e8390a74b5a46c8b968527da6512",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.outset.ai/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 106 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.painspotter/painspotter",
   "version": "1.0.0",
   "slug": "ai-painspotter-painspotter",
   "scanned_at": "2026-10-16T02:27:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/archoor/reddit-insight",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): X-API-Key; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://painspotter.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/archoor/reddit-insight) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.palmyr/palmyr",
   "version": "1.0.0",
   "slug": "ai-palmyr-palmyr",
   "scanned_at": "2026-10-16T02:27:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/0xArtex/Palmyr",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "c2020a70f50cda7d1e2613667f78fdaa36aa9872",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 256,
   "files_pruned": 2,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 0,
     "reason": "2 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 101,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "src/routes/agent-batch.ts",
       "line": 20,
       "excerpt": "// absolute pathname (\"/api/...\"), never a full / scheme-relative / userinfo URL.\n// Without this an unauthenticated caller could redirect the server-side fetch to\n// an internal or cloud-metadata host (e.g. \"@169.254.169.254/...\", \"//evil.tld/...\")\n// and read the response back -- a classic SSRF. We resolve the supplied path\n// against the loopback base and require the resolved origin to still be that",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 105,
       "excerpt": "    nodeFs.mkdirSync(HOST_KEY_DIR, { recursive: true });\n    const { execSync } = require('child_process');\n    const out = String(execSync(`ssh-keyscan -T 8 -t ed25519,rsa,ecdsa ${ip}`, {\n      timeout: 12000, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'],\n    }) || '');",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 105,
       "excerpt": "    nodeFs.mkdirSync(HOST_KEY_DIR, { recursive: true });\n    const { execSync } = require('child_process');\n    const out = String(execSync(`ssh-keyscan -T 8 -t ed25519,rsa,ecdsa ${ip}`, {\n      timeout: 12000, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'],\n    }) || '');",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 180,
       "excerpt": "  const op = opts.append ? '>>' : '>';\n  const chmod = opts.chmod ? ` && chmod ${assertIdent(opts.chmod, 'chmod').toString()} ${remotePath}` : '';\n  execSync(`${ssh} \"echo '${b64}' | base64 -d ${op} ${remotePath}${chmod}\"`, { timeout: opts.timeout ?? 15000 });\n}\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 180,
       "excerpt": "  const op = opts.append ? '>>' : '>';\n  const chmod = opts.chmod ? ` && chmod ${assertIdent(opts.chmod, 'chmod').toString()} ${remotePath}` : '';\n  execSync(`${ssh} \"echo '${b64}' | base64 -d ${op} ${remotePath}${chmod}\"`, { timeout: opts.timeout ?? 15000 });\n}\n",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1155,
       "excerpt": "\n    // 1. Inject user's public key via base64 (never interpolate user input into shell)\n    execSync(`${ssh} \"mkdir -p ~/.ssh && chmod 700 ~/.ssh\"`, { timeout: 20000 });\n    sshWriteFile(ssh, '/root/.ssh/authorized_keys', publicKey.trim() + '\\n', { append: true, chmod: '600', timeout: 20000 });\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1155,
       "excerpt": "\n    // 1. Inject user's public key via base64 (never interpolate user input into shell)\n    execSync(`${ssh} \"mkdir -p ~/.ssh && chmod 700 ~/.ssh\"`, { timeout: 20000 });\n    sshWriteFile(ssh, '/root/.ssh/authorized_keys', publicKey.trim() + '\\n', { append: true, chmod: '600', timeout: 20000 });\n",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1159,
       "excerpt": "\n    // 2. Remove platform temp key from authorized_keys\n    execSync(`${ssh} \"sed -i '/palmyr-platform-temp/d' ~/.ssh/authorized_keys\"`, { timeout: 10000 });\n\n    // 3. Lock root password",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1159,
       "excerpt": "\n    // 2. Remove platform temp key from authorized_keys\n    execSync(`${ssh} \"sed -i '/palmyr-platform-temp/d' ~/.ssh/authorized_keys\"`, { timeout: 10000 });\n\n    // 3. Lock root password",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1162,
       "excerpt": "\n    // 3. Lock root password\n    execSync(`${ssh} \"passwd -l root\"`, { timeout: 10000 });\n\n    // 4. Delete root password from our database — we can never access again",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1162,
       "excerpt": "\n    // 3. Lock root password\n    execSync(`${ssh} \"passwd -l root\"`, { timeout: 10000 });\n\n    // 4. Delete root password from our database — we can never access again",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1198,
       "excerpt": "\n      // Check reachability + OpenClaw version\n      const versionOut = execSync(`${ssh} \"openclaw --version 2>/dev/null || echo NOT_INSTALLED\"`, { timeout: 15000, encoding: \"utf-8\" }).trim();\n      result.reachable = true;\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1198,
       "excerpt": "\n      // Check reachability + OpenClaw version\n      const versionOut = execSync(`${ssh} \"openclaw --version 2>/dev/null || echo NOT_INSTALLED\"`, { timeout: 15000, encoding: \"utf-8\" }).trim();\n      result.reachable = true;\n",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1208,
       "excerpt": "      // Check provision metadata\n      try {\n        const provisionJson = execSync(`${ssh} \"cat /etc/openclaw/provision.json 2>/dev/null || echo {}\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n        result.provision_log = JSON.parse(provisionJson);\n        result.hardened = result.provision_log?.hardened || false;",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1208,
       "excerpt": "      // Check provision metadata\n      try {\n        const provisionJson = execSync(`${ssh} \"cat /etc/openclaw/provision.json 2>/dev/null || echo {}\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n        result.provision_log = JSON.parse(provisionJson);\n        result.hardened = result.provision_log?.hardened || false;",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1215,
       "excerpt": "      // Check firewall\n      try {\n        const ufwStatus = execSync(`${ssh} \"ufw status 2>/dev/null | head -1 || echo inactive\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n        result.firewall = ufwStatus.includes(\"active\") ? \"active\" : \"inactive\";\n      } catch (e) { result.firewall = \"unknown\"; }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1215,
       "excerpt": "      // Check firewall\n      try {\n        const ufwStatus = execSync(`${ssh} \"ufw status 2>/dev/null | head -1 || echo inactive\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n        result.firewall = ufwStatus.includes(\"active\") ? \"active\" : \"inactive\";\n      } catch (e) { result.firewall = \"unknown\"; }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1260,
       "excerpt": "\n    // 1. Ensure directory exists\n    execSync(`${ssh} \"mkdir -p /root/.openclaw/workspace\"`, { timeout: 10000 });\n\n    // 2. Read existing config (or start fresh)",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1260,
       "excerpt": "\n    // 1. Ensure directory exists\n    execSync(`${ssh} \"mkdir -p /root/.openclaw/workspace\"`, { timeout: 10000 });\n\n    // 2. Read existing config (or start fresh)",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1265,
       "excerpt": "    let config: any = {};\n    try {\n      const existing = execSync(`${ssh} \"cat /root/.openclaw/openclaw.json 2>/dev/null || echo '{}'\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n      config = JSON.parse(existing);\n    } catch (e) { config = {}; }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1265,
       "excerpt": "    let config: any = {};\n    try {\n      const existing = execSync(`${ssh} \"cat /root/.openclaw/openclaw.json 2>/dev/null || echo '{}'\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n      config = JSON.parse(existing);\n    } catch (e) { config = {}; }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1302,
       "excerpt": "          }\n        };\n        execSync(`${ssh} \"mkdir -p /root/.openclaw/agents/main/agent\"`, { timeout: 10000 });\n        sshWriteFile(ssh, '/root/.openclaw/agents/main/agent/auth-profiles.json', JSON.stringify(authProfile, null, 2));\n      } else {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1302,
       "excerpt": "          }\n        };\n        execSync(`${ssh} \"mkdir -p /root/.openclaw/agents/main/agent\"`, { timeout: 10000 });\n        sshWriteFile(ssh, '/root/.openclaw/agents/main/agent/auth-profiles.json', JSON.stringify(authProfile, null, 2));\n      } else {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1310,
       "excerpt": "        // Idempotent: remove old line, then write user-provided key via base64 stdin\n        // (never interpolate anthropicKey into the shell string).\n        execSync(`${ssh} \"grep -v '^${envVar}=' /etc/environment > /tmp/env.tmp 2>/dev/null || true\"`, { timeout: 10000 });\n        sshWriteFile(ssh, '/tmp/env.tmp', `${envVar}=${anthropicKey}\\n`, { append: true });\n        execSync(`${ssh} \"mv /tmp/env.tmp /etc/environment\"`, { timeout: 10000 });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1310,
       "excerpt": "        // Idempotent: remove old line, then write user-provided key via base64 stdin\n        // (never interpolate anthropicKey into the shell string).\n        execSync(`${ssh} \"grep -v '^${envVar}=' /etc/environment > /tmp/env.tmp 2>/dev/null || true\"`, { timeout: 10000 });\n        sshWriteFile(ssh, '/tmp/env.tmp', `${envVar}=${anthropicKey}\\n`, { append: true });\n        execSync(`${ssh} \"mv /tmp/env.tmp /etc/environment\"`, { timeout: 10000 });",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1312,
       "excerpt": "        execSync(`${ssh} \"grep -v '^${envVar}=' /etc/environment > /tmp/env.tmp 2>/dev/null || true\"`, { timeout: 10000 });\n        sshWriteFile(ssh, '/tmp/env.tmp', `${envVar}=${anthropicKey}\\n`, { append: true });\n        execSync(`${ssh} \"mv /tmp/env.tmp /etc/environment\"`, { timeout: 10000 });\n      }\n    }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1312,
       "excerpt": "        execSync(`${ssh} \"grep -v '^${envVar}=' /etc/environment > /tmp/env.tmp 2>/dev/null || true\"`, { timeout: 10000 });\n        sshWriteFile(ssh, '/tmp/env.tmp', `${envVar}=${anthropicKey}\\n`, { append: true });\n        execSync(`${ssh} \"mv /tmp/env.tmp /etc/environment\"`, { timeout: 10000 });\n      }\n    }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1349,
       "excerpt": "    const configJson = JSON.stringify(config, null, 2);\n    const configB64 = Buffer.from(configJson).toString('base64');\n    execSync(`${ssh} \"echo '${configB64}' | base64 -d > /root/.openclaw/openclaw.json\"`, { timeout: 10000 });\n\n    // 6. Create workspace files if agent name provided",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1349,
       "excerpt": "    const configJson = JSON.stringify(config, null, 2);\n    const configB64 = Buffer.from(configJson).toString('base64');\n    execSync(`${ssh} \"echo '${configB64}' | base64 -d > /root/.openclaw/openclaw.json\"`, { timeout: 10000 });\n\n    // 6. Create workspace files if agent name provided",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1380,
       "excerpt": "\n    const svcB64 = Buffer.from(serviceFile).toString('base64');\n    execSync(`${ssh} \"echo '${svcB64}' | base64 -d > /etc/systemd/system/openclaw.service\"`, { timeout: 10000 });\n    execSync(`${ssh} \"systemctl daemon-reload && systemctl enable openclaw && systemctl restart openclaw\"`, { timeout: 20000 });\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1380,
       "excerpt": "\n    const svcB64 = Buffer.from(serviceFile).toString('base64');\n    execSync(`${ssh} \"echo '${svcB64}' | base64 -d > /etc/systemd/system/openclaw.service\"`, { timeout: 10000 });\n    execSync(`${ssh} \"systemctl daemon-reload && systemctl enable openclaw && systemctl restart openclaw\"`, { timeout: 20000 });\n",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1381,
       "excerpt": "    const svcB64 = Buffer.from(serviceFile).toString('base64');\n    execSync(`${ssh} \"echo '${svcB64}' | base64 -d > /etc/systemd/system/openclaw.service\"`, { timeout: 10000 });\n    execSync(`${ssh} \"systemctl daemon-reload && systemctl enable openclaw && systemctl restart openclaw\"`, { timeout: 20000 });\n\n    // 6. Verify it started",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1381,
       "excerpt": "    const svcB64 = Buffer.from(serviceFile).toString('base64');\n    execSync(`${ssh} \"echo '${svcB64}' | base64 -d > /etc/systemd/system/openclaw.service\"`, { timeout: 10000 });\n    execSync(`${ssh} \"systemctl daemon-reload && systemctl enable openclaw && systemctl restart openclaw\"`, { timeout: 20000 });\n\n    // 6. Verify it started",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1386,
       "excerpt": "    let running = false;\n    try {\n      const status = execSync(`${ssh} \"systemctl is-active openclaw 2>/dev/null || echo inactive\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n      running = status === \"active\";\n    } catch (e) {}",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1386,
       "excerpt": "    let running = false;\n    try {\n      const status = execSync(`${ssh} \"systemctl is-active openclaw 2>/dev/null || echo inactive\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n      running = status === \"active\";\n    } catch (e) {}",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1428,
       "excerpt": "    let config: any = {};\n    try {\n      const existing = execSync(`${ssh} \"cat /root/.openclaw/openclaw.json 2>/dev/null || echo '{}'\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n      config = JSON.parse(existing);\n    } catch (e) { config = {}; }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1428,
       "excerpt": "    let config: any = {};\n    try {\n      const existing = execSync(`${ssh} \"cat /root/.openclaw/openclaw.json 2>/dev/null || echo '{}'\"`, { timeout: 10000, encoding: \"utf-8\" }).trim();\n      config = JSON.parse(existing);\n    } catch (e) { config = {}; }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1445,
       "excerpt": "      // Clear auth-profiles.json\n      try {\n        execSync(`${ssh} \"rm -f /root/.openclaw/agents/main/agent/auth-profiles.json\"`, { timeout: 10000 });\n      } catch (e) {}\n      // Clear env var on server",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1445,
       "excerpt": "      // Clear auth-profiles.json\n      try {\n        execSync(`${ssh} \"rm -f /root/.openclaw/agents/main/agent/auth-profiles.json\"`, { timeout: 10000 });\n      } catch (e) {}\n      // Clear env var on server",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1449,
       "excerpt": "      // Clear env var on server\n      try {\n        execSync(`${ssh} \"grep -v '_API_KEY' /etc/environment > /tmp/env.tmp 2>/dev/null; mv /tmp/env.tmp /etc/environment\"`, { timeout: 10000 });\n      } catch (e) {}\n    }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1449,
       "excerpt": "      // Clear env var on server\n      try {\n        execSync(`${ssh} \"grep -v '_API_KEY' /etc/environment > /tmp/env.tmp 2>/dev/null; mv /tmp/env.tmp /etc/environment\"`, { timeout: 10000 });\n      } catch (e) {}\n    }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1456,
       "excerpt": "    const configJson = JSON.stringify(config, null, 2);\n    const configB64 = Buffer.from(configJson).toString('base64');\n    execSync(`${ssh} \"echo '${configB64}' | base64 -d > /root/.openclaw/openclaw.json\"`, { timeout: 10000 });\n\n    // Restart OpenClaw",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1456,
       "excerpt": "    const configJson = JSON.stringify(config, null, 2);\n    const configB64 = Buffer.from(configJson).toString('base64');\n    execSync(`${ssh} \"echo '${configB64}' | base64 -d > /root/.openclaw/openclaw.json\"`, { timeout: 10000 });\n\n    // Restart OpenClaw",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1459,
       "excerpt": "\n    // Restart OpenClaw\n    execSync(`${ssh} \"systemctl restart openclaw 2>/dev/null || true\"`, { timeout: 15000 });\n\n    res.json({ success: true, removed: remove });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1459,
       "excerpt": "\n    // Restart OpenClaw\n    execSync(`${ssh} \"systemctl restart openclaw 2>/dev/null || true\"`, { timeout: 15000 });\n\n    res.json({ success: true, removed: remove });",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1491,
       "excerpt": "\n    // Create skills directory\n    execSync(`${ssh} \"mkdir -p /root/.openclaw/workspace/skills\"`, { timeout: 10000 });\n\n    // Install skill via git clone or copy from clawhub",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1491,
       "excerpt": "\n    // Create skills directory\n    execSync(`${ssh} \"mkdir -p /root/.openclaw/workspace/skills\"`, { timeout: 10000 });\n\n    // Install skill via git clone or copy from clawhub",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1506,
       "excerpt": "        // Tar + pipe to remote (skillName is validated ident)\n        const parentDir = require(\"path\").dirname(sourcePath);\n        execSync(`tar -C ${parentDir} -cf - ${skillName} | ${ssh} \"tar -C /root/.openclaw/workspace/skills -xf -\"`, { timeout: 30000 });\n      } else if (skillUrl) {\n        // Git clone — skillUrl and skillName are validated above",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/routes/compute.ts",
       "line": 1506,
       "excerpt": "        // Tar + pipe to remote (skillName is validated ident)\n        const parentDir = require(\"path\").dirname(sourcePath);\n        execSync(`tar -C ${parentDir} -cf - ${skillName} | ${ssh} \"tar -C /root/.openclaw/workspace/skills -xf -\"`, { timeout: 30000 });\n      } else if (skillUrl) {\n        // Git clone — skillUrl and skillName are validated above",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/routes/compute.ts",
       "line": 1509,
       "excerpt": "      } else if (skillUrl) {\n        // Git clone — skillUrl and skillName are validated above\n        execSync(`${ssh} \"git clone --depth 1 ${skillUrl} ${skillDir} 2>/dev/null || echo 'clone failed'\"`, { timeout: 30000 });\n      } else {\n        return res.status(400).json({ error: `Skill '${skillName}' not found locally and no URL provided` });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 75,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (auth middleware) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://palmyr.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Private Key at cli/compute-ssh.ts:34; Private Key at public/dashboard.html:3357; …and 92 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "34 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 69,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 33 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 4 issue(s) in the last 6 months: 22.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 5 days (by releases), last release 145 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "1 vulnerability could not be placed in `03` §6's table and is listed but not scored",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 126,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "@whiskeysockets/baileys 7.0.0-rc.9 — GHSA-qvv5-jq5g-4cgg",
       "detail": "direct, CVSS 9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qvv5-jq5g-4cgg",
       "finding": "@whiskeysockets/baileys:GHSA-qvv5-jq5g-4cgg",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 6.8.8 — GHSA-xq3m-2v4x-88gg",
       "detail": "transitive, CVSS 9.8, fixed in 7.5.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xq3m-2v4x-88gg",
       "finding": "protobufjs:GHSA-xq3m-2v4x-88gg",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-xq3m-2v4x-88gg",
       "detail": "transitive, CVSS 9.8, fixed in 7.5.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xq3m-2v4x-88gg",
       "finding": "protobufjs:GHSA-xq3m-2v4x-88gg",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "shell-quote 1.8.3 — GHSA-w7jw-789q-3m8p",
       "detail": "transitive, CVSS 9.2, fixed in 1.8.4",
       "path": "cli/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7jw-789q-3m8p",
       "finding": "shell-quote:GHSA-w7jw-789q-3m8p",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 6.4.2 — GHSA-fx2h-pf6j-xcff",
       "detail": "direct, CVSS 8.2, fixed in 6.4.3",
       "path": "frontend/discovery/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "compression 1.8.1 — GHSA-vc2v-76pw-4v95",
       "detail": "direct, CVSS 7.5, fixed in 1.8.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vc2v-76pw-4v95",
       "finding": "compression:GHSA-vc2v-76pw-4v95",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-proxy-middleware 3.0.5 — GHSA-gcq2-9pq2-cxqm",
       "detail": "direct, CVSS 7.5, fixed in 3.0.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gcq2-9pq2-cxqm",
       "finding": "http-proxy-middleware:GHSA-gcq2-9pq2-cxqm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 8.3.2 — GHSA-w5hq-g745-h8pq",
       "detail": "direct, CVSS 7.5, fixed in 11.1.1",
       "path": "cli/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 11.1.0 — GHSA-w5hq-g745-h8pq",
       "detail": "direct, CVSS 7.5, fixed in 11.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 8.3.2 — GHSA-w5hq-g745-h8pq",
       "detail": "direct, CVSS 7.5, fixed in 11.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 7.5.10 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 7.5.11",
       "path": "cli/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.17.1 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 8.21.0",
       "path": "cli/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.20.1 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 8.21.0",
       "path": "cli/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 7.5.10 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 7.5.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.17.1 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 8.21.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.18.3 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 8.21.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.20.0 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 8.21.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.4 — GHSA-35jp-ww65-95wh",
       "detail": "transitive, CVSS 8.7, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-35jp-ww65-95wh",
       "finding": "axios:GHSA-35jp-ww65-95wh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.5 — GHSA-hmw2-7cc7-3qxx",
       "detail": "transitive, CVSS 8.7, fixed in 4.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-3ppc-4f35-3m26",
       "detail": "transitive, CVSS 8.7, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3ppc-4f35-3m26",
       "finding": "minimatch:GHSA-3ppc-4f35-3m26",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "shell-quote 1.8.3 — GHSA-395f-4hp3-45gv",
       "detail": "transitive, CVSS 8.7, fixed in 1.9.0",
       "path": "cli/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-395f-4hp3-45gv",
       "finding": "shell-quote:GHSA-395f-4hp3-45gv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "frontend/discovery/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nodemailer 8.0.5 — GHSA-r7g4-qg5f-qqm2",
       "detail": "transitive, CVSS 8.3, fixed in 8.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r7g4-qg5f-qqm2",
       "finding": "nodemailer:GHSA-r7g4-qg5f-qqm2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.4 — GHSA-542g-h47m-68v8",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-542g-h47m-68v8",
       "finding": "axios:GHSA-542g-h47m-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.4 — GHSA-p92q-9vqr-4j8v",
       "detail": "transitive, CVSS 8.2, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p92q-9vqr-4j8v",
       "finding": "axios:GHSA-p92q-9vqr-4j8v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.12 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "frontend/discovery/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.12 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "frontend/discovery/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "lodash 4.17.23 — GHSA-r5fr-rjxr-66jc",
       "detail": "transitive, CVSS 8.1, fixed in 4.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r5fr-rjxr-66jc",
       "finding": "lodash:GHSA-r5fr-rjxr-66jc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 6.8.8 — GHSA-75px-5xx7-5xc7",
       "detail": "transitive, CVSS 8.1, fixed in 7.5.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-75px-5xx7-5xc7",
       "finding": "protobufjs:GHSA-75px-5xx7-5xc7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-75px-5xx7-5xc7",
       "detail": "transitive, CVSS 8.1, fixed in 7.5.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-75px-5xx7-5xc7",
       "finding": "protobufjs:GHSA-75px-5xx7-5xc7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bigint-buffer 1.1.5 — GHSA-3gc7-fjrx-p6mg",
       "detail": "transitive, CVSS 7.7",
       "path": "cli/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3gc7-fjrx-p6mg",
       "finding": "bigint-buffer:GHSA-3gc7-fjrx-p6mg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bigint-buffer 1.1.5 — GHSA-3gc7-fjrx-p6mg",
       "detail": "transitive, CVSS 7.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3gc7-fjrx-p6mg",
       "finding": "bigint-buffer:GHSA-3gc7-fjrx-p6mg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 6.8.8 — GHSA-66ff-xgx4-vchm",
       "detail": "transitive, CVSS 7.7, fixed in 7.5.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-66ff-xgx4-vchm",
       "finding": "protobufjs:GHSA-66ff-xgx4-vchm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-66ff-xgx4-vchm",
       "detail": "transitive, CVSS 7.7, fixed in 7.5.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-66ff-xgx4-vchm",
       "finding": "protobufjs:GHSA-66ff-xgx4-vchm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.4 — GHSA-43fc-jf86-j433",
       "detail": "transitive, CVSS 7.5, fixed in 1.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-43fc-jf86-j433",
       "finding": "axios:GHSA-43fc-jf86-j433",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.4 — GHSA-62hf-57xw-28j9",
       "detail": "transitive, CVSS 7.5, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-62hf-57xw-28j9",
       "finding": "axios:GHSA-62hf-57xw-28j9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.4 — GHSA-777c-7fjr-54vf",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-777c-7fjr-54vf",
       "finding": "axios:GHSA-777c-7fjr-54vf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.4 — GHSA-hfxv-24rg-xrqf",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hfxv-24rg-xrqf",
       "finding": "axios:GHSA-hfxv-24rg-xrqf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.13.4 — GHSA-j5f8-grm9-p9fc",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j5f8-grm9-p9fc",
       "finding": "axios:GHSA-j5f8-grm9-p9fc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 45,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.paperlantern/code",
   "version": "0.3.1",
   "slug": "ai-paperlantern-code",
   "scanned_at": "2026-10-16T02:27:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/paperlantern-ai/paperlantern-cli",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f3aa9c54d3da586cc8421692ad692765b29b120f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 37,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/auth.ts",
       "line": 17,
       "excerpt": "  const platform = process.platform;\n  try {\n    if (platform === \"darwin\") execSync(`open \"${url}\"`);\n    else if (platform === \"win32\") execSync(`start \"\" \"${url}\"`);\n    else execSync(`xdg-open \"${url}\"`);",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/auth.ts",
       "line": 17,
       "excerpt": "  const platform = process.platform;\n  try {\n    if (platform === \"darwin\") execSync(`open \"${url}\"`);\n    else if (platform === \"win32\") execSync(`start \"\" \"${url}\"`);\n    else execSync(`xdg-open \"${url}\"`);",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/auth.ts",
       "line": 18,
       "excerpt": "  try {\n    if (platform === \"darwin\") execSync(`open \"${url}\"`);\n    else if (platform === \"win32\") execSync(`start \"\" \"${url}\"`);\n    else execSync(`xdg-open \"${url}\"`);\n  } catch {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/auth.ts",
       "line": 18,
       "excerpt": "  try {\n    if (platform === \"darwin\") execSync(`open \"${url}\"`);\n    else if (platform === \"win32\") execSync(`start \"\" \"${url}\"`);\n    else execSync(`xdg-open \"${url}\"`);\n  } catch {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/auth.ts",
       "line": 19,
       "excerpt": "    if (platform === \"darwin\") execSync(`open \"${url}\"`);\n    else if (platform === \"win32\") execSync(`start \"\" \"${url}\"`);\n    else execSync(`xdg-open \"${url}\"`);\n  } catch {\n    // browser open failed — user will use the printed URL",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/auth.ts",
       "line": 19,
       "excerpt": "    if (platform === \"darwin\") execSync(`open \"${url}\"`);\n    else if (platform === \"win32\") execSync(`start \"\" \"${url}\"`);\n    else execSync(`xdg-open \"${url}\"`);\n  } catch {\n    // browser open failed — user will use the printed URL",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/auth.ts",
       "line": 53,
       "excerpt": "export async function authenticate(): Promise<string> {\n  // Step 1: Request a device code\n  const codeResp = await fetch(DEVICE_CODE_URL, {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/auth.ts",
       "line": 86,
       "excerpt": "    let resp: Response;\n    try {\n      resp = await fetch(DEVICE_TOKEN_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.paperlantern.ai/chat/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 178 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 99,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "esbuild 0.27.7 — GHSA-g7r4-m6w7-qqqr",
       "detail": "transitive, CVSS 2.5, fixed in 0.28.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g7r4-m6w7-qqqr",
       "finding": "esbuild:GHSA-g7r4-m6w7-qqqr",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.parallel/task-mcp",
   "version": "1.0.0",
   "slug": "ai-parallel-task-mcp",
   "scanned_at": "2026-10-16T02:27:51+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/parallel-web/task-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "bc0daf6b76cf0e403c0c3aeac15ff67452adf018",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://task-mcp.parallel.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 69,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 35 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 4.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 40,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.posteverywhere/mcp",
   "version": "1.11.0",
   "slug": "ai-posteverywhere-mcp",
   "scanned_at": "2026-10-16T02:27:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/posteverywhere/mcp",
   "package": "npm:@posteverywhere/mcp@1.11.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "d134ddf1eda6fbbaea1217d28a3becbb2e268fcb",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 171,
       "excerpt": "  private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n    const url = `${this.baseUrl}/api/v1${path}`;\n    const resp = await fetch(url, {\n      method,\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.posteverywhere.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:84; Secret Keyword at dist/index.d.ts:17; Secret Keyword at dist/index.js:17",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 64,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 3 issue(s) in the last 6 months: 66.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.searcheros/searcher-os",
   "version": "1.0.1",
   "slug": "ai-searcheros-searcher-os",
   "scanned_at": "2026-10-16T02:27:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Searcher-OS/searcher-os-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "dfbc90306bf33069651bf28c656b272d8b8d309d",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://searcheros.ai/api/mcp/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 70 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 19,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.smithery/BigVik193-reddit-ads-mcp-api",
   "version": "1.0.0",
   "slug": "ai-smithery-bigvik193-reddit-ads-mcp-api",
   "scanned_at": "2026-10-16T02:28:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/BigVik193/reddit-ads-mcp-api",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "dbcf47d5a043ef29aa56503e218efe327276a3d2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential enforcement present in source but not documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://server.smithery.ai/@BigVik193/reddit-ads-mcp-api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at .smithery/index.cjs:12701",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "11 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 10,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 396 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (0 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 15,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.18.0 — GHSA-8r9q-7v3j-jr4g",
       "detail": "direct, CVSS 8.7, fixed in 1.25.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8r9q-7v3j-jr4g",
       "finding": "@modelcontextprotocol/sdk:GHSA-8r9q-7v3j-jr4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-35jp-ww65-95wh",
       "detail": "direct, CVSS 8.7, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-35jp-ww65-95wh",
       "finding": "axios:GHSA-35jp-ww65-95wh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.4 — GHSA-hmw2-7cc7-3qxx",
       "detail": "direct, CVSS 8.7, fixed in 4.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-p92q-9vqr-4j8v",
       "detail": "direct, CVSS 8.2, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p92q-9vqr-4j8v",
       "finding": "axios:GHSA-p92q-9vqr-4j8v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.18.0 — GHSA-w48q-cv73-mx4w",
       "detail": "direct, CVSS 7.6, fixed in 1.24.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w48q-cv73-mx4w",
       "finding": "@modelcontextprotocol/sdk:GHSA-w48q-cv73-mx4w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.18.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-43fc-jf86-j433",
       "detail": "direct, CVSS 7.5, fixed in 1.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-43fc-jf86-j433",
       "finding": "axios:GHSA-43fc-jf86-j433",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-62hf-57xw-28j9",
       "detail": "direct, CVSS 7.5, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-62hf-57xw-28j9",
       "finding": "axios:GHSA-62hf-57xw-28j9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-777c-7fjr-54vf",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-777c-7fjr-54vf",
       "finding": "axios:GHSA-777c-7fjr-54vf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-hfxv-24rg-xrqf",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hfxv-24rg-xrqf",
       "finding": "axios:GHSA-hfxv-24rg-xrqf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-j5f8-grm9-p9fc",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j5f8-grm9-p9fc",
       "finding": "axios:GHSA-j5f8-grm9-p9fc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-6chq-wfr3-2hj9",
       "detail": "direct, CVSS 7.4, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6chq-wfr3-2hj9",
       "finding": "axios:GHSA-6chq-wfr3-2hj9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-pf86-5x62-jrwf",
       "detail": "direct, CVSS 7.4, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pf86-5x62-jrwf",
       "finding": "axios:GHSA-pf86-5x62-jrwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-q8qp-cvcw-x6jj",
       "detail": "direct, CVSS 7.4, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8qp-cvcw-x6jj",
       "finding": "axios:GHSA-q8qp-cvcw-x6jj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-pmwg-cvhr-8vh7",
       "detail": "direct, CVSS 7.2, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmwg-cvhr-8vh7",
       "finding": "axios:GHSA-pmwg-cvhr-8vh7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.18.0 — GHSA-345p-7cg4-v4c7",
       "detail": "direct, CVSS 7.1, fixed in 1.26.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-345p-7cg4-v4c7",
       "finding": "@modelcontextprotocol/sdk:GHSA-345p-7cg4-v4c7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-3g43-6gmg-66jw",
       "detail": "direct, CVSS 7.0, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3g43-6gmg-66jw",
       "finding": "axios:GHSA-3g43-6gmg-66jw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "jsondiffpatch 0.6.0 — GHSA-j4fx-xxwh-2485",
       "detail": "transitive, CVSS 8.2, fixed in 0.7.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j4fx-xxwh-2485",
       "finding": "jsondiffpatch:GHSA-j4fx-xxwh-2485",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "smol-toml 1.4.2 — GHSA-7w5x-hrqm-74c2",
       "detail": "transitive, CVSS 8.2, fixed in 1.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7w5x-hrqm-74c2",
       "finding": "smol-toml:GHSA-7w5x-hrqm-74c2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "lodash 4.17.21 — GHSA-r5fr-rjxr-66jc",
       "detail": "transitive, CVSS 8.1, fixed in 4.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r5fr-rjxr-66jc",
       "finding": "lodash:GHSA-r5fr-rjxr-66jc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.3.0 — GHSA-j3q9-mxjg-w52f",
       "detail": "transitive, CVSS 7.5, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j3q9-mxjg-w52f",
       "finding": "path-to-regexp:GHSA-j3q9-mxjg-w52f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "picomatch 2.3.1 — GHSA-c2c7-rcm5-vvqj",
       "detail": "transitive, CVSS 7.5, fixed in 2.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c2c7-rcm5-vvqj",
       "finding": "picomatch:GHSA-c2c7-rcm5-vvqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 11.1.0 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-xwg4-73v4-xw9w",
       "detail": "transitive, CVSS 7.4, fixed in 3.3.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xwg4-73v4-xw9w",
       "finding": "nanoid:GHSA-xwg4-73v4-xw9w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-4hqw-qxg8-jxx2",
       "detail": "direct, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4hqw-qxg8-jxx2",
       "finding": "axios:GHSA-4hqw-qxg8-jxx2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-9fr6-4gfg-395g",
       "detail": "direct, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9fr6-4gfg-395g",
       "finding": "axios:GHSA-9fr6-4gfg-395g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-j8rh-479h-cp32",
       "detail": "direct, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j8rh-479h-cp32",
       "finding": "axios:GHSA-j8rh-479h-cp32",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-vh66-26gq-q6x8",
       "detail": "direct, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vh66-26gq-q6x8",
       "finding": "axios:GHSA-vh66-26gq-q6x8",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-m7pr-hjqh-92cm",
       "detail": "direct, CVSS 6.8, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m7pr-hjqh-92cm",
       "finding": "axios:GHSA-m7pr-hjqh-92cm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-3w6x-2g7m-8v23",
       "detail": "direct, CVSS 6.5, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3w6x-2g7m-8v23",
       "finding": "axios:GHSA-3w6x-2g7m-8v23",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-3p68-rc4w-qgx5",
       "detail": "direct, CVSS 6.3, fixed in 1.15.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3p68-rc4w-qgx5",
       "finding": "axios:GHSA-3p68-rc4w-qgx5",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-42h9-826w-cgv3",
       "detail": "direct, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-42h9-826w-cgv3",
       "finding": "axios:GHSA-42h9-826w-cgv3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-7q8q-rj6j-mhjq",
       "detail": "direct, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7q8q-rj6j-mhjq",
       "finding": "axios:GHSA-7q8q-rj6j-mhjq",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-jqh4-m9w3-8hp9",
       "detail": "direct, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqh4-m9w3-8hp9",
       "finding": "axios:GHSA-jqh4-m9w3-8hp9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-mmx7-hfxf-jppx",
       "detail": "direct, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mmx7-hfxf-jppx",
       "finding": "axios:GHSA-mmx7-hfxf-jppx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-pmv8-rq9r-6j72",
       "detail": "direct, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmv8-rq9r-6j72",
       "finding": "axios:GHSA-pmv8-rq9r-6j72",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-xx6v-rp6x-q39c",
       "detail": "direct, CVSS 5.4, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xx6v-rp6x-q39c",
       "finding": "axios:GHSA-xx6v-rp6x-q39c",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-445q-vr5w-6q77",
       "detail": "direct, CVSS 5.3, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-445q-vr5w-6q77",
       "finding": "axios:GHSA-445q-vr5w-6q77",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-5c9x-8gcm-mpgx",
       "detail": "direct, CVSS 5.3, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5c9x-8gcm-mpgx",
       "finding": "axios:GHSA-5c9x-8gcm-mpgx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-vf2m-468p-8v99",
       "detail": "direct, CVSS 5.3, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vf2m-468p-8v99",
       "finding": "axios:GHSA-vf2m-468p-8v99",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-898c-q2cr-xwhg",
       "detail": "direct, CVSS 4.8, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-898c-q2cr-xwhg",
       "finding": "axios:GHSA-898c-q2cr-xwhg",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-fvcv-3m26-pcqx",
       "detail": "direct, CVSS 4.8, fixed in 1.15.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fvcv-3m26-pcqx",
       "finding": "axios:GHSA-fvcv-3m26-pcqx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.1 — GHSA-w9j2-pvgh-6h63",
       "detail": "direct, CVSS 4.8, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w9j2-pvgh-6h63",
       "finding": "axios:GHSA-w9j2-pvgh-6h63",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "follow-redirects 1.15.11 — GHSA-r4q5-vmmm-2653",
       "detail": "transitive, CVSS 6.9, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r4q5-vmmm-2653",
       "finding": "follow-redirects:GHSA-r4q5-vmmm-2653",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "lodash 4.17.21 — GHSA-f23m-r3pf-42rh",
       "detail": "transitive, CVSS 6.9, fixed in 4.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23m-r3pf-42rh",
       "finding": "lodash:GHSA-f23m-r3pf-42rh",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'ISC' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.smithery/sebastianall1977-gmail-mcp",
   "version": "1.7.4",
   "slug": "ai-smithery-sebastianall1977-gmail-mcp",
   "scanned_at": "2026-10-16T02:28:19+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/sebastianall1977/gmail-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "66b06b969b1e3a529c85f200d79ec7a86a110abd",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.4",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://server.smithery.ai/@sebastianall1977/gmail-mcp/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 737 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at pnpm-lock.yaml:67; Base64 High Entropy String at pnpm-lock.yaml:73; Base64 High Entropy String at pnpm-lock.yaml:77; Base64 High Entropy String at pnpm-lock.yaml:87; Base64 High Entropy String at pnpm-lock.yaml:93; Base64 High Entropy String at pnpm-lock.yaml:97; Base64 High Entropy String at pnpm-lock.yaml:100; Base64 High Entropy String at pnpm-lock.yaml:104; Base64 High Entropy String at pnpm-lock.yaml:108; Base64 High Entropy String at pnpm-lock.yaml:112; …and 727 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "1 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 10,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 379 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (0 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 32,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "protobufjs 7.5.3 — GHSA-xq3m-2v4x-88gg",
       "detail": "transitive, CVSS 9.8, fixed in 7.5.5",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xq3m-2v4x-88gg",
       "finding": "protobufjs:GHSA-xq3m-2v4x-88gg",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.16.0 — GHSA-8r9q-7v3j-jr4g",
       "detail": "direct, CVSS 8.7, fixed in 1.25.2",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8r9q-7v3j-jr4g",
       "finding": "@modelcontextprotocol/sdk:GHSA-8r9q-7v3j-jr4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.16.0 — GHSA-w48q-cv73-mx4w",
       "detail": "direct, CVSS 7.6, fixed in 1.24.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w48q-cv73-mx4w",
       "finding": "@modelcontextprotocol/sdk:GHSA-w48q-cv73-mx4w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.16.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.16.0 — GHSA-345p-7cg4-v4c7",
       "detail": "direct, CVSS 7.1, fixed in 1.26.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-345p-7cg4-v4c7",
       "finding": "@modelcontextprotocol/sdk:GHSA-345p-7cg4-v4c7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.4 — GHSA-hmw2-7cc7-3qxx",
       "detail": "transitive, CVSS 8.7, fixed in 4.0.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-3ppc-4f35-3m26",
       "detail": "transitive, CVSS 8.7, fixed in 3.1.3",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3ppc-4f35-3m26",
       "finding": "minimatch:GHSA-3ppc-4f35-3m26",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@babel/plugin-transform-modules-systemjs 7.27.1 — GHSA-fv7c-fp4j-7gwp",
       "detail": "transitive, CVSS 8.2, fixed in 7.29.4",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fv7c-fp4j-7gwp",
       "finding": "@babel/plugin-transform-modules-systemjs:GHSA-fv7c-fp4j-7gwp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "jsondiffpatch 0.6.0 — GHSA-j4fx-xxwh-2485",
       "detail": "transitive, CVSS 8.2, fixed in 0.7.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j4fx-xxwh-2485",
       "finding": "jsondiffpatch:GHSA-j4fx-xxwh-2485",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "lodash 4.17.21 — GHSA-r5fr-rjxr-66jc",
       "detail": "transitive, CVSS 8.1, fixed in 4.18.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r5fr-rjxr-66jc",
       "finding": "lodash:GHSA-r5fr-rjxr-66jc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.3 — GHSA-75px-5xx7-5xc7",
       "detail": "transitive, CVSS 8.1, fixed in 7.5.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-75px-5xx7-5xc7",
       "finding": "protobufjs:GHSA-75px-5xx7-5xc7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.3 — GHSA-66ff-xgx4-vchm",
       "detail": "transitive, CVSS 7.7, fixed in 7.5.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-66ff-xgx4-vchm",
       "finding": "protobufjs:GHSA-66ff-xgx4-vchm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tmp 0.0.33 — GHSA-ph9p-34f9-6g65",
       "detail": "transitive, CVSS 7.7, fixed in 0.2.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ph9p-34f9-6g65",
       "finding": "tmp:GHSA-ph9p-34f9-6g65",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@grpc/grpc-js 1.13.4 — GHSA-5375-pq7m-f5r2",
       "detail": "transitive, CVSS 7.5, fixed in 1.13.5",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5375-pq7m-f5r2",
       "finding": "@grpc/grpc-js:GHSA-5375-pq7m-f5r2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@grpc/grpc-js 1.13.4 — GHSA-99f4-grh7-6pcq",
       "detail": "transitive, CVSS 7.5, fixed in 1.13.5",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-99f4-grh7-6pcq",
       "finding": "@grpc/grpc-js:GHSA-99f4-grh7-6pcq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@opentelemetry/auto-instrumentations-node 0.46.1 — GHSA-q7rr-3cgh-j5r3",
       "detail": "transitive, CVSS 7.5, fixed in 0.75.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q7rr-3cgh-j5r3",
       "finding": "@opentelemetry/auto-instrumentations-node:GHSA-q7rr-3cgh-j5r3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@opentelemetry/propagator-jaeger 1.24.1 — GHSA-45rx-2jwx-cxfr",
       "detail": "transitive, CVSS 7.5, fixed in 2.9.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-45rx-2jwx-cxfr",
       "finding": "@opentelemetry/propagator-jaeger:GHSA-45rx-2jwx-cxfr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@opentelemetry/sdk-node 0.51.1 — GHSA-q7rr-3cgh-j5r3",
       "detail": "transitive, CVSS 7.5, fixed in 0.217.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q7rr-3cgh-j5r3",
       "finding": "@opentelemetry/sdk-node:GHSA-q7rr-3cgh-j5r3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.25.1 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.25.1 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.1 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.2",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.1 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.1 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "jws 4.0.0 — GHSA-869p-cjfg-cm3x",
       "detail": "transitive, CVSS 7.5, fixed in 4.0.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-869p-cjfg-cm3x",
       "finding": "jws:GHSA-869p-cjfg-cm3x",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-23c5-xmqv-rm74",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-23c5-xmqv-rm74",
       "finding": "minimatch:GHSA-23c5-xmqv-rm74",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-7r86-cg39-jmmj",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7r86-cg39-jmmj",
       "finding": "minimatch:GHSA-7r86-cg39-jmmj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.2.0 — GHSA-j3q9-mxjg-w52f",
       "detail": "transitive, CVSS 7.5, fixed in 8.4.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j3q9-mxjg-w52f",
       "finding": "path-to-regexp:GHSA-j3q9-mxjg-w52f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "picomatch 2.3.1 — GHSA-c2c7-rcm5-vvqj",
       "detail": "transitive, CVSS 7.5, fixed in 2.3.2",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c2c7-rcm5-vvqj",
       "finding": "picomatch:GHSA-c2c7-rcm5-vvqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.3 — GHSA-685m-2w69-288q",
       "detail": "transitive, CVSS 7.5, fixed in 7.5.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-685m-2w69-288q",
       "finding": "protobufjs:GHSA-685m-2w69-288q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.3 — GHSA-jvwf-75h9-cwgg",
       "detail": "transitive, CVSS 7.5, fixed in 7.5.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jvwf-75h9-cwgg",
       "finding": "protobufjs:GHSA-jvwf-75h9-cwgg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.3 — GHSA-wcpc-wj8m-hjx6",
       "detail": "transitive, CVSS 7.5, fixed in 7.6.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wcpc-wj8m-hjx6",
       "finding": "protobufjs:GHSA-wcpc-wj8m-hjx6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 11.1.0 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 9.0.1 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@grpc/grpc-js 1.13.4 — GHSA-m9gg-hp2v-232j",
       "detail": "transitive, CVSS 7.4, fixed in 1.13.6",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m9gg-hp2v-232j",
       "finding": "@grpc/grpc-js:GHSA-m9gg-hp2v-232j",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-xwg4-73v4-xw9w",
       "detail": "transitive, CVSS 7.4, fixed in 3.3.12",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xwg4-73v4-xw9w",
       "finding": "nanoid:GHSA-xwg4-73v4-xw9w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "lodash 4.17.21 — GHSA-f23m-r3pf-42rh",
       "detail": "transitive, CVSS 6.9, fixed in 4.18.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23m-r3pf-42rh",
       "finding": "lodash:GHSA-f23m-r3pf-42rh",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sprintf-js 1.0.3 — GHSA-hp3w-g68c-fv3c",
       "detail": "transitive, CVSS 6.9",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hp3w-g68c-fv3c",
       "finding": "sprintf-js:GHSA-hp3w-g68c-fv3c",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-f886-m6hf-6m8v",
       "detail": "transitive, CVSS 6.5, fixed in 1.1.13",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f886-m6hf-6m8v",
       "finding": "brace-expansion:GHSA-f886-m6hf-6m8v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-6rw7-vpxm-498p",
       "detail": "transitive, CVSS 6.3, fixed in 6.14.1",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6rw7-vpxm-498p",
       "finding": "qs:GHSA-6rw7-vpxm-498p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 50,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.tensorfeed/x402-base-mcp",
   "version": "0.2.1",
   "slug": "ai-tensorfeed-x402-base-mcp",
   "scanned_at": "2026-10-16T02:28:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/RipperMercs/tensorfeed-x402-base-mcp",
   "package": "npm:@tensorfeed/x402-base-mcp@0.2.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "48673d0e5663796211973c3ed1c79205702d3fdd",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 13,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "scored on the declared repository at version 0.2.1, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/tools/tf.ts",
       "line": 91,
       "excerpt": "      const url = `${TF_AFTA_CERT_ENDPOINT}?domain=${encodeURIComponent(domain)}`;\n      try {\n        const res = await fetch(url, {\n          method: 'GET',\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/tools/x402.ts",
       "line": 185,
       "excerpt": "      const url = `https://${domain}${path}`;\n      try {\n        const res = await fetch(url, {\n          method: 'GET',\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/tools/x402.ts",
       "line": 303,
       "excerpt": "    let res: Response;\n    try {\n      res = await fetch(url, {\n        method: 'GET',\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 69,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 108.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by tags), last release 141 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "ai.trendsapi/wikipedia",
   "version": "1.0.1",
   "slug": "ai-trendsapi-wikipedia",
   "scanned_at": "2026-10-16T02:28:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/trendsapi-ai/wikipedia-trends-api",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "bf44eeae69b0f7c707173bb0051732b126e00fe1",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://wikipedia.api.trendsapi.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (TRENDSAPI_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 59 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 44,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "python/CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "app.apiguru/amazon-data",
   "version": "1.1.54",
   "slug": "app-apiguru-amazon-data",
   "scanned_at": "2026-10-16T02:28:33+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/apiguru-app/agent-kit",
   "package": "pypi:apiguru-mcp@1.1.54",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 16,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (auth middleware) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.apiguru.app/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:92; Secret Keyword at README.md:62",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 5 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "app.desktopcommander/remote-desktop-commander",
   "version": "1.0.75",
   "slug": "app-desktopcommander-remote-desktop-commander",
   "scanned_at": "2026-10-16T02:28:35+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/desktop-commander/remote-desktop-commander",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "106960be476ecf47f75cd571468318e7063dea12",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.desktopcommander.app/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 75,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 50 issue(s) in the last 6 months: 12.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "app.evlek/mcp-server",
   "version": "3.1.4",
   "slug": "app-evlek-mcp-server",
   "scanned_at": "2026-10-16T02:28:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Evlek/evlek-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "fa46bf5754e325eba23dde286d84121fa636d610",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.js",
       "line": 81,
       "excerpt": "        const controller = new AbortController();\n        const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n        const res = await fetch(DATA_API, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://evlek.app/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 44,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.30.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-5jgf-p345-68v8",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5jgf-p345-68v8",
       "finding": "fast-uri:GHSA-5jgf-p345-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.3.1 — GHSA-2vr4-cq9g-pvrc",
       "detail": "transitive, CVSS 6.9, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2vr4-cq9g-pvrc",
       "finding": "ip-address:GHSA-2vr4-cq9g-pvrc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-gqvv-2mrq-wpjv",
       "detail": "transitive, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.3.1 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.3.1 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.3.1 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-crvj-82cr-hjcx",
       "detail": "transitive, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-54fx-42gc-7vw4",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-8j4g-w8fx-2239",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-g6gw-c38x-mqfc",
       "detail": "transitive, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-f23p-vx2j-j53r",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-hxh3-vqpv-xpqv",
       "detail": "transitive, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-79qm-7rj5-m7r9",
       "detail": "transitive, CVSS 3.7, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-79qm-7rj5-m7r9",
       "finding": "hono:GHSA-79qm-7rj5-m7r9",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "app.wishpool/chile-payments-mcp",
   "version": "0.1.0",
   "slug": "app-wishpool-chile-payments-mcp",
   "scanned_at": "2026-10-16T02:28:41+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/junter1989k-ai/chile-payments-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp-cl.wishpool.app/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/chile-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "app.wishpool/global-logistics-mcp",
   "version": "0.1.0",
   "slug": "app-wishpool-global-logistics-mcp",
   "scanned_at": "2026-10-16T02:28:41+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/junter1989k-ai/global-logistics-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://logi-global.wishpool.app/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/global-logistics-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "app.wishpool/hong-kong-payments-mcp",
   "version": "0.1.0",
   "slug": "app-wishpool-hong-kong-payments-mcp",
   "scanned_at": "2026-10-16T02:28:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/junter1989k-ai/hong-kong-payments-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp-hk.wishpool.app/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/junter1989k-ai/hong-kong-payments-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "be.lexgo/jobs",
   "version": "1.1.0",
   "slug": "be-lexgo-jobs",
   "scanned_at": "2026-10-16T02:28:43+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/belexgo/lexgo",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.lexgo.be/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/belexgo/lexgo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "capital.hove/read-only-local-postgres-mcp-server",
   "version": "0.1.0",
   "slug": "capital-hove-read-only-local-postgres-mcp-server",
   "scanned_at": "2026-10-16T02:28:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/hovecapital/read-only-local-postgres-mcp-server",
   "package": "npm:@hovecapital/read-only-postgres-mcp-server@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "81768c5a94e40a5d48bc171f0c0c2e949576ac9b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 8 credential-shaped string(s), every one from a keyword or entropy heuristic (Basic Auth Credentials, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:62; Basic Auth Credentials at README.md:288; Basic Auth Credentials at README.md:301; Basic Auth Credentials at README.md:302; Basic Auth Credentials at README.md:362; Basic Auth Credentials at README.md:438; Secret Keyword at README.md:474; Basic Auth Credentials at dist/index.js:91",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 73,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 39 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 65 days (by releases), last release 42 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "co.contraption/mcp",
   "version": "1.0.0",
   "slug": "co-contraption-mcp",
   "scanned_at": "2026-10-16T02:28:48+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/contraptionco/mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "sse",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "0884b6977499d806d220914cca01c7e972e058fe",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 9,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.4",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.contraption.co/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at tests/conftest.py:9; Secret Keyword at tests/conftest.py:12",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "3 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 232 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "1 vulnerability could not be placed in `03` §6's table and is listed but not scored",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 103,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "chromadb 1.4.0 — PYSEC-2026-311",
       "detail": "direct, CVSS 10.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-311",
       "finding": "chromadb:PYSEC-2026-311",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fastmcp 2.12.3 — PYSEC-2026-338",
       "detail": "direct, CVSS 10.0, fixed in 3.2.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-338",
       "finding": "fastmcp:PYSEC-2026-338",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "chromadb 1.4.0 — PYSEC-2026-3814",
       "detail": "direct, CVSS 9.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3814",
       "finding": "chromadb:PYSEC-2026-3814",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4145",
       "detail": "direct, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 45.0.7 — PYSEC-2026-36",
       "detail": "transitive, CVSS 9.8, fixed in 46.0.7",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.10.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "aiohttp 3.13.3 — PYSEC-2026-2102",
       "detail": "transitive, CVSS 9.1, fixed in 3.13.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2102",
       "finding": "aiohttp:PYSEC-2026-2102",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authlib 1.6.3 — PYSEC-2026-287",
       "detail": "transitive, CVSS 9.1, fixed in 1.6.9",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-287",
       "finding": "authlib:PYSEC-2026-287",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "chromadb 1.4.0 — PYSEC-2026-3813",
       "detail": "direct, CVSS 8.8",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3813",
       "finding": "chromadb:PYSEC-2026-3813",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "chromadb 1.4.0 — PYSEC-2026-3815",
       "detail": "direct, CVSS 8.8",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3815",
       "finding": "chromadb:PYSEC-2026-3815",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fastmcp 2.12.3 — PYSEC-2026-2476",
       "detail": "direct, CVSS 8.2, fixed in 3.2.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2476",
       "finding": "fastmcp:PYSEC-2026-2476",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4183",
       "detail": "direct, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-120",
       "detail": "direct, CVSS 7.5, fixed in 2.12.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-120",
       "finding": "pyjwt:PYSEC-2026-120",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fastmcp 2.12.3 — PYSEC-2026-2474",
       "detail": "direct, CVSS 7.4, fixed in 2.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2474",
       "finding": "fastmcp:PYSEC-2026-2474",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-179",
       "detail": "direct, CVSS 7.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-179",
       "finding": "pyjwt:PYSEC-2026-179",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4144",
       "detail": "direct, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4149",
       "detail": "direct, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fastmcp 2.12.3 — GHSA-c2jp-c369-7pvx",
       "detail": "direct, CVSS 7.3, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c2jp-c369-7pvx",
       "finding": "fastmcp:GHSA-c2jp-c369-7pvx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2025-183",
       "detail": "direct, CVSS 7.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2025-183",
       "finding": "pyjwt:PYSEC-2025-183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.5.0 — PYSEC-2026-1994",
       "detail": "transitive, CVSS 8.9, fixed in 2.6.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1994",
       "finding": "urllib3:PYSEC-2026-1994",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.5.0 — PYSEC-2026-1996",
       "detail": "transitive, CVSS 8.9, fixed in 2.6.3",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1996",
       "finding": "urllib3:PYSEC-2026-1996",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.5.0 — PYSEC-2026-1998",
       "detail": "transitive, CVSS 8.9, fixed in 2.6.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1998",
       "finding": "urllib3:PYSEC-2026-1998",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.5.0 — PYSEC-2026-4177",
       "detail": "transitive, CVSS 8.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4177",
       "finding": "urllib3:PYSEC-2026-4177",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fsspec 2025.9.0 — PYSEC-2026-4217",
       "detail": "transitive, CVSS 8.8, fixed in 2026.6.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4217",
       "finding": "fsspec:PYSEC-2026-4217",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 45.0.7 — PYSEC-2026-3553",
       "detail": "transitive, CVSS 8.7, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pillow 12.1.0 — PYSEC-2026-2250",
       "detail": "transitive, CVSS 8.7, fixed in 12.2.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2250",
       "finding": "pillow:PYSEC-2026-2250",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pillow 12.1.0 — PYSEC-2026-3496",
       "detail": "transitive, CVSS 8.7, fixed in 12.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3496",
       "finding": "pillow:PYSEC-2026-3496",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pillow 12.1.0 — PYSEC-2026-2249",
       "detail": "transitive, CVSS 8.6, fixed in 12.1.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2249",
       "finding": "pillow:PYSEC-2026-2249",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pillow 12.1.0 — PYSEC-2026-2252",
       "detail": "transitive, CVSS 8.6, fixed in 12.2.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2252",
       "finding": "pillow:PYSEC-2026-2252",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.20 — PYSEC-2026-1852",
       "detail": "transitive, CVSS 8.6, fixed in 0.0.22",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1852",
       "finding": "python-multipart:PYSEC-2026-1852",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authlib 1.6.3 — PYSEC-2026-2116",
       "detail": "transitive, CVSS 8.3, fixed in 1.6.9",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2116",
       "finding": "authlib:PYSEC-2026-2116",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pillow 12.1.0 — PYSEC-2026-3493",
       "detail": "transitive, CVSS 8.3, fixed in 12.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3493",
       "finding": "pillow:PYSEC-2026-3493",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authlib 1.6.3 — PYSEC-2026-2117",
       "detail": "transitive, CVSS 8.2, fixed in 1.6.9",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2117",
       "finding": "authlib:PYSEC-2026-2117",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 45.0.7 — PYSEC-2026-2141",
       "detail": "transitive, CVSS 8.2, fixed in 46.0.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2141",
       "finding": "cryptography:PYSEC-2026-2141",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 45.0.7 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "langchain-core 1.2.6 — PYSEC-2026-2564",
       "detail": "transitive, CVSS 8.2, fixed in 1.3.3",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2564",
       "finding": "langchain-core:PYSEC-2026-2564",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pillow 12.1.0 — PYSEC-2026-3454",
       "detail": "transitive, CVSS 8.2, fixed in 12.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3454",
       "finding": "pillow:PYSEC-2026-3454",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobuf 6.32.1 — PYSEC-2026-1805",
       "detail": "transitive, CVSS 8.2, fixed in 6.33.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1805",
       "finding": "protobuf:PYSEC-2026-1805",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.5.0 — PYSEC-2026-141",
       "detail": "transitive, CVSS 8.2, fixed in 2.7.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-141",
       "finding": "urllib3:PYSEC-2026-141",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 20.34.0 — PYSEC-2026-4013",
       "detail": "transitive, CVSS 7.8, fixed in 21.7.13",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4013",
       "finding": "virtualenv:PYSEC-2026-4013",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "langsmith 0.6.0 — GHSA-f4xh-w4cj-qxq8",
       "detail": "transitive, CVSS 7.7, fixed in 0.8.18",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f4xh-w4cj-qxq8",
       "finding": "langsmith:GHSA-f4xh-w4cj-qxq8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orjson 3.11.3 — PYSEC-2026-107",
       "detail": "transitive, CVSS 7.7, fixed in 3.11.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-107",
       "finding": "orjson:PYSEC-2026-107",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 20.34.0 — PYSEC-2026-4011",
       "detail": "transitive, CVSS 7.7, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4011",
       "finding": "virtualenv:PYSEC-2026-4011",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.14.0 — PYSEC-2026-1617",
       "detail": "transitive, CVSS 7.6, fixed in 1.23.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1617",
       "finding": "mcp:PYSEC-2026-1617",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.14.0 — PYSEC-2026-3483",
       "detail": "transitive, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.5.0 — PYSEC-2026-4175",
       "detail": "transitive, CVSS 7.6, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4175",
       "finding": "urllib3:PYSEC-2026-4175",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "aiohttp 3.13.3 — PYSEC-2026-2095",
       "detail": "transitive, CVSS 7.5, fixed in 3.13.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2095",
       "finding": "aiohttp:PYSEC-2026-2095",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "aiohttp 3.13.3 — PYSEC-2026-2097",
       "detail": "transitive, CVSS 7.5, fixed in 3.13.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2097",
       "finding": "aiohttp:PYSEC-2026-2097",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "aiohttp 3.13.3 — PYSEC-2026-2098",
       "detail": "transitive, CVSS 7.5, fixed in 3.13.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2098",
       "finding": "aiohttp:PYSEC-2026-2098",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "aiohttp 3.13.3 — PYSEC-2026-2105",
       "detail": "transitive, CVSS 7.5, fixed in 3.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2105",
       "finding": "aiohttp:PYSEC-2026-2105",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.a2awire/data-hacker-news-front-page-tech-news",
   "version": "0.1.1",
   "slug": "com-a2awire-data-hacker-news-front-page-tech-news",
   "scanned_at": "2026-10-16T02:28:54+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/ee324/a2awire",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://a2awire.com/mcp/data/hnfrontpage-hacker-news-front-page-live-ba8ea8/http; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/ee324/a2awire) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.angelsforagents/funding",
   "version": "1.1.0",
   "slug": "com-angelsforagents-funding",
   "scanned_at": "2026-10-16T02:28:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/AngelsForAgents/afa-agent-kit",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "7c416057e02fac515963377127a64bed16f8b3f7",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "lib/pitch.mjs",
       "line": 41,
       "excerpt": "\nexport async function requestJson(url, options = {}) {\n  const response = await fetch(url, {\n    ...options,\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://angelsforagents.com/api/v1/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 59 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 71,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "fast-uri 3.1.5 — GHSA-5jgf-p345-68v8",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5jgf-p345-68v8",
       "finding": "fast-uri:GHSA-5jgf-p345-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ajv 8.17.1 — GHSA-2g4f-4pwh-qvx6",
       "detail": "direct, CVSS 5.5, fixed in 8.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2g4f-4pwh-qvx6",
       "finding": "ajv:GHSA-2g4f-4pwh-qvx6",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.averray/mcp",
   "version": "1.1.0",
   "slug": "com-averray-mcp",
   "scanned_at": "2026-10-16T02:28:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/averray-agent/agent",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "039764842f3ad0d59f1baa3b87572b9c80c69b8a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1397,
   "files_pruned": 46,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 68,
     "reason": "66 findings in test code are listed but not deducted; 46 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 2 files could not be parsed and were not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 60,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "app/handoffs/averray-mobile-operator-control/project/support.js",
       "line": 71,
       "excerpt": "    const rest = {};\n    for (const k of Object.keys(obj)) {\n      if (k[0] !== \"$\") rest[k] = obj[k];\n    }\n    return { props: Object.keys(rest).length ? rest : null, preview };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "app/handoffs/averray-mobile-operator-control/project/support.js",
       "line": 189,
       "excerpt": "        for (const k in entry.propsMeta || {}) {\n          const v = entry.propsMeta?.[k]?.default;\n          if (v !== void 0) d[k] = v;\n        }\n        return d;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "app/handoffs/averray-mobile-operator-control/project/support.js",
       "line": 1227,
       "excerpt": "        for (const k of Object.keys(window)) {\n          if (!before.has(k) && typeof window[k] === \"function\") {\n            globals[k] = window[k];\n          }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/core/agent-profile.js",
       "line": 305,
       "excerpt": "    }\n    for (const key of Object.keys(totals)) {\n      totals[key] += Number.isInteger(signals[key]) ? signals[key] : 0;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/core/job-catalog-normalization.js",
       "line": 332,
       "excerpt": "        throw new ValidationError(`schedule.${key} must be ISO-8601 if provided`);\n      }\n      normalised[key] = new Date(parsed).toISOString();\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/core/job-catalog-normalization.js",
       "line": 505,
       "excerpt": "  for (const key of [\"pausedAt\", \"archivedAt\", \"reopenedAt\"]) {\n    if (typeof raw[key] === \"string\" && raw[key].trim()) {\n      lifecycle[key] = normalizeIsoTimestamp(raw[key], `lifecycle.${key}`);\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/core/job-catalog-normalization.js",
       "line": 510,
       "excerpt": "  for (const key of [\"reason\", \"staleReason\"]) {\n    if (typeof raw[key] === \"string\" && raw[key].trim()) {\n      lifecycle[key] = raw[key].trim().slice(0, 500);\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/core/work-receipt.js",
       "line": 113,
       "excerpt": "      throw new ValidationError(`Verdict-core commitment requires root section ${section}.`);\n    }\n    verdictCore[section] = value;\n  }\n  return hashCanonicalContent(verdictCore);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/services/arrival-dropoff.js",
       "line": 220,
       "excerpt": "    for (const actor of DROP_OFF_ACTORS) {\n      for (const stage of ARRIVAL_STAGES) {\n        totals[door][actor][stage] = topCodes(totals[door][actor][stage]);\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": "2026-10-11",
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/services/arrival-observatory.js",
       "line": 886,
       "excerpt": "      }\n      for (const source of ATTRIBUTION_SOURCES) {\n        current.attributionSources[source] += Number(entry.attributionSources?.[source] ?? 0);\n      }\n      current.doors = [...new Set([",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/services/arrival-observatory.js",
       "line": 1204,
       "excerpt": "  for (const source of ATTRIBUTION_SOURCES) {\n    if (Number.isFinite(Number(stored?.[source]))) {\n      target[source] = Number(stored[source]);\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/services/arrival-operator-view.js",
       "line": 202,
       "excerpt": "        current.doors.add(door);\n        const reached = hasReachedSessionStage(session, \"submitted\") ? \"submitted\" : \"claimed\";\n        if (stageRank(reached) > stageRank(current.doorFurthest[door])) current.doorFurthest[door] = reached;\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/services/bootstrap.js",
       "line": 1606,
       "excerpt": "  ]) {\n    if (xcm[key] !== undefined) {\n      normalized[key] = xcm[key];\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcp-server/src/services/deposit-pool-observability.js",
       "line": 44,
       "excerpt": "  };\n  for (const key of [\"assetsRaw\", \"sharesRaw\", \"requestId\", \"tier\", \"unlockAt\"]) {\n    if (event[key] !== undefined && event[key] !== null) common[key] = String(event[key]);\n  }\n  return common;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/handoffs/averray-mobile-operator-control/project/support.js",
       "line": 159,
       "excerpt": "    runtime.adoptParsed(rootName, parsed);\n    if (!window.__resources) {\n      fetch(location.href).then((res) => res.ok ? res.text() : \"\").then((t) => {\n        const raw = t ? parseDcText(t) : null;\n        if (raw?.template) runtime.updateHtml(rootName, raw.template);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/handoffs/averray-mobile-operator-control/project/support.js",
       "line": 1206,
       "excerpt": "        const pre = bundledBlob(url);\n        if (pre) return pre.text();\n        return fetch(url).then((r) => {\n          if (!r.ok) throw new Error(\"HTTP \" + r.status);\n          return r.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/handoffs/averray-mobile-operator-control/project/support.js",
       "line": 1651,
       "excerpt": "      const target = typeof pre === \"string\" && pre ? pre : url;\n      const blob = bundledBlob(target);\n      (blob ? blob.text() : fetch(target).then((res2) => {\n        if (!res2.ok) {\n          console.error(",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/lib/api/client.ts",
       "line": 94,
       "excerpt": "    : method === \"GET\" && mode === \"bounded\"\n      ? await fetchAppReadWithRetry(url, { ...init, headers })\n      : await fetch(url, { ...init, headers });\n  const bodyText = await response.text();\n  let body: unknown = bodyText;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/lib/auth/siwe.ts",
       "line": 70,
       "excerpt": "  if (token) {\n    try {\n      await fetch(apiUrl(\"/auth/logout\"), {\n        method: \"POST\",\n        headers: { authorization: `Bearer ${token}` },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/lib/auth/siwe.ts",
       "line": 100,
       "excerpt": "  let response: Response;\n  try {\n    response = await fetch(apiUrl(\"/auth/refresh\"), {\n      method: \"POST\",\n      headers: { authorization: `Bearer ${token}` },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp-server/src/demo/mcp-dual-era-local.js",
       "line": 152,
       "excerpt": "\nasync function post({ body, headers = {} }) {\n  const response = await fetch(endpoint, {\n    method: \"POST\",\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp-server/src/demo/mcp-prober-compose-smoke.js",
       "line": 43,
       "excerpt": "async function waitHealthy(url) {\n  for (let attempt = 0; attempt < 60; attempt += 1) {\n    try { if ((await fetch(url)).ok) return; } catch {}\n    await new Promise((resolve) => setTimeout(resolve, 250));\n  }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp-server/src/services/pimlico-client.js",
       "line": 140,
       "excerpt": "\n  async rpc(url, method, params = []) {\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/mcp/polkadot-docs-bridge.mjs",
       "line": 112,
       "excerpt": "  }\n\n  const response = await fetch(endpoint, {\n    method: 'POST',\n    headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/mcp/polkadot-docs-bridge.mjs",
       "line": 225,
       "excerpt": "\n  try {\n    await fetch(endpoint, {\n      method: 'DELETE',\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/check-x402-ramp-readiness.mjs",
       "line": 200,
       "excerpt": "      requestPath: url.pathname\n    });\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/exercise-async-xcm-request.mjs",
       "line": 213,
       "excerpt": "\nasync function readJson(url, bearerToken) {\n  const response = await fetch(url, {\n    headers: {\n      accept: \"application/json\",",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/exercise-async-xcm-request.mjs",
       "line": 226,
       "excerpt": "\nasync function postJson(url, body, bearerToken) {\n  const response = await fetch(url, {\n    method: \"POST\",\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/pool-venue-ceremony.mjs",
       "line": 632,
       "excerpt": "  const timeout = setTimeout(() => controller.abort(), 10_000);\n  try {\n    const response = await fetch(url, { signal: controller.signal });\n    if (!response.ok) throw new Error(`HTTP ${response.status}`);\n    return await response.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/pool-venue-dispatch.mjs",
       "line": 823,
       "excerpt": "  const timeout = setTimeout(() => controller.abort(), 10_000);\n  try {\n    const response = await fetch(url, { signal: controller.signal });\n    if (!response.ok) throw new Error(`HTTP ${response.status}`);\n    return response.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/review-github-pr-submissions.mjs",
       "line": 26,
       "excerpt": "\nexport async function review(options, { request, print = console.log }) {\n  if (options.mode === \"list\") { print(JSON.stringify(await request(\"GET\", \"/admin/verifier/pending\"), null, 2)); return 0; }\n  if (![\"preview\", \"settle\"].includes(options.mode)) throw new Error(`Unknown review mode: ${options.mode}`);\n  const payload = { sessionId: options.sessionId };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/review-github-pr-submissions.mjs",
       "line": 29,
       "excerpt": "  if (![\"preview\", \"settle\"].includes(options.mode)) throw new Error(`Unknown review mode: ${options.mode}`);\n  const payload = { sessionId: options.sessionId };\n  const verdict = await request(\"POST\", \"/admin/verifier/run\", { ...payload, preview: true });\n  print(JSON.stringify(verdict, null, 2));\n  if (options.mode === \"preview\") return 0;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/review-github-pr-submissions.mjs",
       "line": 33,
       "excerpt": "  if (options.mode === \"preview\") return 0;\n  if (verdict.outcome !== options.expect) return 2;\n  print(JSON.stringify(await request(\"POST\", \"/admin/verifier/run\", { ...payload, expectOutcome: options.expect }), null, 2));\n  return 0;\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/run-bounty-worker.mjs",
       "line": 733,
       "excerpt": "    async publish(packet) {\n      const repository = packet.repository.nameWithOwner;\n      const installation = await request(\"/installation/repositories?per_page=100\", {\n        errorCode: \"BOUNTY_GITHUB_SCOPE_REFUSED\",\n        exitCode: BOUNTY_WORKER_EXIT.githubScopeRefused,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/run-bounty-worker.mjs",
       "line": 750,
       "excerpt": "      const materialized = await materializeCommitImpl(packet, { runCommandImpl });\n      try {\n        const base = await request(\n          `/repos/${repository}/git/ref/heads/${encodeURIComponent(packet.repository.baseRef)}`,\n          {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/run-bounty-worker.mjs",
       "line": 767,
       "excerpt": "\n        const headBranch = deriveHeadBranch(packet);\n        const existingHead = await request(\n          `/repos/${repository}/git/ref/heads/${encodeURIComponent(headBranch)}`,\n          { allow404: true },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/run-bounty-worker.mjs",
       "line": 789,
       "excerpt": "\n        const owner = repository.split(\"/\")[0];\n        const pullRequests = await request(\n          `/repos/${repository}/pulls?state=all&head=${encodeURIComponent(`${owner}:${headBranch}`)}`,\n        );",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/run-bounty-worker.mjs",
       "line": 812,
       "excerpt": "        }\n\n        const created = await request(`/repos/${repository}/pulls`, {\n          method: \"POST\",\n          body: pullRequestPayload(packet, headBranch),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/scratch-dogfood-credit.mjs",
       "line": 39,
       "excerpt": "  if (!args.input) throw new Error(\"--input is required as JSON, for example '{\\\"direction\\\":\\\"borrow\\\",\\\"pledgeShares\\\":\\\"10000000\\\",\\\"amount\\\":\\\"8000000\\\"}'\");\n  const headers = { authorization: `Bearer ${args.token}`, \"content-type\": \"application/json\" };\n  const infoResponse = await fetch(new URL(\"/credit\", args.baseUrl), { headers });\n  const info = await infoResponse.json();\n  if (!infoResponse.ok || info.available !== true) throw new Error(`getCreditInfo refused: ${JSON.stringify(info)}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/scratch-dogfood-credit.mjs",
       "line": 42,
       "excerpt": "  const info = await infoResponse.json();\n  if (!infoResponse.ok || info.available !== true) throw new Error(`getCreditInfo refused: ${JSON.stringify(info)}`);\n  const buildResponse = await fetch(new URL(\"/credit/transactions\", args.baseUrl), { method: \"POST\", headers, body: JSON.stringify(args.input) });\n  const built = await buildResponse.json();\n  if (!buildResponse.ok || built.available !== true) throw new Error(`buildCreditTransactions refused: ${JSON.stringify(built)}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ops/validate-subscan-xcm-source.mjs",
       "line": 215,
       "excerpt": "\nasync function fetchJson(url, init) {\n  const response = await fetch(url, init);\n  if (!response.ok) {\n    throw new Error(`Request failed with HTTP ${response.status} for ${typeof url === \"string\" ? url : url.toString()}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/post_job_bundle.mjs",
       "line": 123,
       "excerpt": "\nasync function readJson(url) {\n  const response = await fetch(url, {\n    headers: {\n      accept: \"application/json\"",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/post_job_bundle.mjs",
       "line": 135,
       "excerpt": "\nasync function postJson(url, body, bearerToken) {\n  const response = await fetch(url, {\n    method: \"POST\",\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "witness/src/artifacts.mjs",
       "line": 57,
       "excerpt": "  let response;\n  try {\n    response = await fetch(artifact.locator.url, { redirect: \"follow\" });\n  } catch (error) {\n    throw new ArtifactAcquisitionError(`artifact fetch failed: ${error.message}`, {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "app/lib/api/badge-list-pagination.test.mjs",
       "line": 14,
       "excerpt": "function compile(source, modules) {\n  const exports = {};\n  vm.runInNewContext(ts.transpileModule(source, { compilerOptions: {\n    module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022\n  } }).outputText, { exports, require: (key) => {",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "app/lib/api/review-errors.test.mjs",
       "line": 9,
       "excerpt": "const root = new URL(\"../../\", import.meta.url);\nconst exports = {};\nvm.runInNewContext(ts.transpileModule(readFileSync(new URL(\"lib/api/client.ts\", root), \"utf8\"), {\n  compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022 }\n}).outputText, { exports, require: () => ({}) });",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "app/lib/api/review-errors.test.mjs",
       "line": 29,
       "excerpt": "    [[{ code: \"github_pr_review_overdue\" }], true],\n    [[{ code: \"github_pr_review_read_failures\" }, { code: \"github_pr_review_overdue\" }], true]\n  ]) assert.equal(vm.runInNewContext(expression, { githubReview: { warnings } }), expected);\n});",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "app/lib/auth/fresh-visitor.test.mjs",
       "line": 20,
       "excerpt": "    compilerOptions: { module: ts.ModuleKind.CommonJS, jsx: ts.JsxEmit.ReactJSX, target: ts.ScriptTarget.ES2022 }\n  }).outputText;\n  vm.runInNewContext(code, { exports, require: (name) => modules[name] ?? require(name),\n    console, AbortSignal, setTimeout, clearTimeout, setInterval, clearInterval, ...globals });\n  return exports;",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "app/lib/chain/chain-ticker.test.mjs",
       "line": 9,
       "excerpt": "test(\"review backlog does not degrade a fresh healthy chain chip\", () => {\n  const exports = {};\n  vm.runInNewContext(ts.transpileModule(readFileSync(new URL(\"../chain-ticker.ts\", import.meta.url), \"utf8\"), {\n    compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022 }\n  }).outputText, { exports });",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "app/lib/ui/human-verdict-panel.test.mjs",
       "line": 15,
       "excerpt": "function load(file, modules) {\n  const exports = {};\n  vm.runInNewContext(ts.transpileModule(read(file), { compilerOptions: {\n    module: ts.ModuleKind.CommonJS, jsx: ts.JsxEmit.ReactJSX, target: ts.ScriptTarget.ES2022\n  } }).outputText, { exports, require: (name) => modules[name] ?? require(name) });",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 71,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.averray.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Private Key at .github/workflows/deploy-production.yml:325; JSON Web Token at mcp-server/src/core/redact-provider-error.test.js:28; JSON Web Token at scripts/ops/get-admin-refresh-token.test.mjs:36; …and 1023 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.55",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 13 issue(s) in the last 6 months: 29.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 72,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "astro 7.1.0 — GHSA-26w7-cxv4-gfx2",
       "detail": "direct, CVSS 9.8, fixed in 7.2.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26w7-cxv4-gfx2",
       "finding": "astro:GHSA-26w7-cxv4-gfx2",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.0 — GHSA-2xp9-vwfh-vxw4",
       "detail": "direct, CVSS 9.5, fixed in 16.3.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2xp9-vwfh-vxw4",
       "finding": "next:GHSA-2xp9-vwfh-vxw4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.0 — GHSA-vcvr-r3jv-pc5j",
       "detail": "direct, CVSS 9.5, fixed in 16.3.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vcvr-r3jv-pc5j",
       "finding": "next:GHSA-vcvr-r3jv-pc5j",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.0 — GHSA-p293-qw3h-jr36",
       "detail": "direct, CVSS 9.0, fixed in 16.3.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p293-qw3h-jr36",
       "finding": "next:GHSA-p293-qw3h-jr36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.0 — GHSA-cjq9-62q9-8jv4",
       "detail": "direct, CVSS 8.3, fixed in 16.3.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cjq9-62q9-8jv4",
       "finding": "next:GHSA-cjq9-62q9-8jv4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.3.1 — GHSA-2883-xcg3-v3hh",
       "detail": "direct, CVSS 7.5, fixed in 4.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.20.1 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 8.21.0",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.18.0 — GHSA-96hv-2xvq-fx4p",
       "detail": "direct, CVSS 7.5, fixed in 8.21.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.35.3 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.35.3 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-cache-semantics 4.2.0 — GHSA-ch52-4w7c-c8xp",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ch52-4w7c-c8xp",
       "finding": "http-cache-semantics:GHSA-ch52-4w7c-c8xp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.1 — GHSA-x97p-jq2g-jp4f",
       "detail": "transitive, CVSS 8.3, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x97p-jq2g-jp4f",
       "finding": "axios:GHSA-x97p-jq2g-jp4f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@graphql-tools/utils 10.11.0 — GHSA-7mx3-vvmw-hjmv",
       "detail": "transitive, CVSS 8.2, fixed in 12.0.1",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7mx3-vvmw-hjmv",
       "finding": "@graphql-tools/utils:GHSA-7mx3-vvmw-hjmv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@graphql-tools/utils 11.2.2 — GHSA-7mx3-vvmw-hjmv",
       "detail": "transitive, CVSS 8.2, fixed in 12.0.1",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7mx3-vvmw-hjmv",
       "finding": "@graphql-tools/utils:GHSA-7mx3-vvmw-hjmv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@graphql-tools/utils 12.0.0 — GHSA-7mx3-vvmw-hjmv",
       "detail": "transitive, CVSS 8.2, fixed in 12.0.1",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7mx3-vvmw-hjmv",
       "finding": "@graphql-tools/utils:GHSA-7mx3-vvmw-hjmv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@graphql-tools/utils 10.11.0 — GHSA-7mx3-vvmw-hjmv",
       "detail": "transitive, CVSS 8.2, fixed in 12.0.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7mx3-vvmw-hjmv",
       "finding": "@graphql-tools/utils:GHSA-7mx3-vvmw-hjmv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@graphql-tools/utils 11.1.0 — GHSA-7mx3-vvmw-hjmv",
       "detail": "transitive, CVSS 8.2, fixed in 12.0.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7mx3-vvmw-hjmv",
       "finding": "@graphql-tools/utils:GHSA-7mx3-vvmw-hjmv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.1 — GHSA-542g-h47m-68v8",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-542g-h47m-68v8",
       "finding": "axios:GHSA-542g-h47m-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.1 — GHSA-c29m-xwm3-cm6r",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c29m-xwm3-cm6r",
       "finding": "axios:GHSA-c29m-xwm3-cm6r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.1 — GHSA-mghh-pgcx-3jjj",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mghh-pgcx-3jjj",
       "finding": "axios:GHSA-mghh-pgcx-3jjj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "deepmerge-ts 7.1.5 — GHSA-ggr8-5vv4-36mx",
       "detail": "transitive, CVSS 8.2, fixed in 8.0.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ggr8-5vv4-36mx",
       "finding": "deepmerge-ts:GHSA-ggr8-5vv4-36mx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.1 — GHSA-mcm9-63f2-9j32",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mcm9-63f2-9j32",
       "finding": "devalue:GHSA-mcm9-63f2-9j32",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.1 — GHSA-r9w8-h9r3-54w4",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r9w8-h9r3-54w4",
       "finding": "devalue:GHSA-r9w8-h9r3-54w4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.1 — GHSA-x5rw-q4pp-hg5g",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5rw-q4pp-hg5g",
       "finding": "devalue:GHSA-x5rw-q4pp-hg5g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "kysely 0.26.3 — GHSA-wmrf-hv6w-mr66",
       "detail": "transitive, CVSS 8.2, fixed in 0.28.12",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wmrf-hv6w-mr66",
       "finding": "kysely:GHSA-wmrf-hv6w-mr66",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "kysely 0.26.3 — GHSA-wmrf-hv6w-mr66",
       "detail": "transitive, CVSS 8.2, fixed in 0.28.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wmrf-hv6w-mr66",
       "finding": "kysely:GHSA-wmrf-hv6w-mr66",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.16 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "smol-toml 1.7.0 — GHSA-7w5x-hrqm-74c2",
       "detail": "transitive, CVSS 8.2, fixed in 1.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7w5x-hrqm-74c2",
       "finding": "smol-toml:GHSA-7w5x-hrqm-74c2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "svgo 4.0.2 — GHSA-w27v-7q3p-w38r",
       "detail": "transitive, CVSS 8.2, fixed in 4.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w27v-7q3p-w38r",
       "finding": "svgo:GHSA-w27v-7q3p-w38r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-fx2h-pf6j-xcff",
       "detail": "transitive, CVSS 8.2, fixed in 6.4.3",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 8.0.13 — GHSA-fx2h-pf6j-xcff",
       "detail": "transitive, CVSS 8.2, fixed in 8.0.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "kysely 0.26.3 — GHSA-8cpq-38p9-67gx",
       "detail": "transitive, CVSS 8.1, fixed in 0.28.14",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8cpq-38p9-67gx",
       "finding": "kysely:GHSA-8cpq-38p9-67gx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "kysely 0.26.3 — GHSA-8cpq-38p9-67gx",
       "detail": "transitive, CVSS 8.1, fixed in 0.28.14",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8cpq-38p9-67gx",
       "finding": "kysely:GHSA-8cpq-38p9-67gx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.1 — GHSA-m8m8-qj5v-23w3",
       "detail": "transitive, CVSS 7.6, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m8m8-qj5v-23w3",
       "finding": "axios:GHSA-m8m8-qj5v-23w3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 3.2.0 — GHSA-x8mw-p69m-v3mx",
       "detail": "transitive, CVSS 7.5, fixed in 3.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x8mw-p69m-v3mx",
       "finding": "@fastify/busboy:GHSA-x8mw-p69m-v3mx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@fastify/busboy 3.2.0 — GHSA-xjh9-v7x6-24jw",
       "detail": "transitive, CVSS 7.5, fixed in 3.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xjh9-v7x6-24jw",
       "finding": "@fastify/busboy:GHSA-xjh9-v7x6-24jw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@hono/node-server 1.19.5 — GHSA-wc8c-qw6v-h7f6",
       "detail": "transitive, CVSS 7.5, fixed in 1.19.10",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wc8c-qw6v-h7f6",
       "finding": "@hono/node-server:GHSA-wc8c-qw6v-h7f6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.4 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.5",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.18 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.4 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.4 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.6",
       "path": "indexer/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.18 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.4 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.8.1 — GHSA-j22f-vq7h-c4qm",
       "detail": "transitive, CVSS 7.5, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j22f-vq7h-c4qm",
       "finding": "devalue:GHSA-j22f-vq7h-c4qm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "packages/mcp/package.json declares 'UNLICENSED' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.axiomatic-ai/prover",
   "version": "0.1.0",
   "slug": "com-axiomatic-ai-prover",
   "scanned_at": "2026-10-16T02:29:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Axiomatic-AI/ax-prover-base-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "5ade6ba077f7f2e10abcd6a64f124a69fe2bc6ca",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://prover.axiomatic-ai.com/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 19,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 229 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 169.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.calibrd/agent",
   "version": "1.0.1",
   "slug": "com-calibrd-agent",
   "scanned_at": "2026-10-16T02:29:38+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Calibrd/calibrd-agent",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "f420b1168cb866c08e08ffc541b0ae595d50de4a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.calibrd.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 36 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.casemargin/casemargin-mcp-server",
   "version": "1.0.2",
   "slug": "com-casemargin-casemargin-mcp-server",
   "scanned_at": "2026-10-16T02:29:39+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Casemargin/casemargin-mcp-server",
   "package": "npm:casemargin-mcp-server@1.0.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/casemargin.ts",
       "line": 52,
       "excerpt": "/** Generate a structured case brief via the same endpoint the web app uses. */\nexport async function generateBrief(ticketContent: string): Promise<AnalyzeResponse> {\n  return request<AnalyzeResponse>(\"/analyze\", { input: ticketContent }, true);\n}\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/casemargin.ts",
       "line": 57,
       "excerpt": "/** Score escalation readiness via the public escalation-score tool endpoint. */\nexport async function scoreEscalation(ticketContent: string): Promise<EscalationScoreResponse> {\n  return request<EscalationScoreResponse>(\n    \"/api/tools/escalation-score\",\n    { ticket_notes: ticketContent },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/casemargin.ts",
       "line": 72,
       "excerpt": "  let res: Response;\n  try {\n    res = await fetch(BASE_URL + path, {\n      method: \"POST\",\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:70",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 72 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 72 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.clauxel.chromedevtoolsmcp/chromedevtoolsmcp-mcp",
   "version": "1.0.0",
   "slug": "com-clauxel-chromedevtoolsmcp-chromedevtoolsmcp-mcp",
   "scanned_at": "2026-10-16T02:29:41+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/clauxel/chrome-devtools-session-mcp-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "8c311ba8f0f5af40c6fd24f30df6c357df3a0222",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://chromedevtoolsmcp.clauxel.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 144 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 45,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.clauxel.fastmcpruntime/fastmcpruntime-mcp",
   "version": "1.0.0",
   "slug": "com-clauxel-fastmcpruntime-fastmcpruntime-mcp",
   "scanned_at": "2026-10-16T02:29:43+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/clauxel/fastmcp-runtime-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "9465e9462cd34617bc57ef63eb7dbf4343e897ef",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://fastmcpruntime.clauxel.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 148 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 45,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.clauxel.semblecodesearchgate/semblecodesearchgate-mcp",
   "version": "1.0.0",
   "slug": "com-clauxel-semblecodesearchgate-semblecodesearchgate-mcp",
   "scanned_at": "2026-10-16T02:29:45+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/clauxel/semble-code-search-gate-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "4d4571c7e0ebb567d2e02cb8ce95fae04c2f6c80",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://semblecodesearchgate.clauxel.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 149 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 45,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.clauxel.unitymcptest/unitymcptest-mcp",
   "version": "1.0.0",
   "slug": "com-clauxel-unitymcptest-unitymcptest-mcp",
   "scanned_at": "2026-10-16T02:29:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/clauxel/unity-mcp-test-loop-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "6085b76110e0566e351bba435687d97b99be3ae1",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://unitymcptest.clauxel.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 142 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 45,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.cypruscompanycost/site",
   "version": "1.0.1",
   "slug": "com-cypruscompanycost-site",
   "scanned_at": "2026-10-16T02:29:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "",
   "source_state": "not_declared",
   "source_subject": "",
   "source_reason": "this server declares no source we know how to fetch",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://cypruscompanycost.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.danubeai/danube",
   "version": "1.0.0",
   "slug": "com-danubeai-danube",
   "scanned_at": "2026-10-16T02:29:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/danubeai/danube-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "fbc1b8a3c23e36be5a946ed24b49cf232e4a1486",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 75,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) danube-api-key that are not required on every declared endpoint, and the source we fetched shows no enforcement — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://mcp.danubeai.com/mcp",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.danubeai.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 229 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 19,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.dmzagent/skill-builder-mcp",
   "version": "1.0.1",
   "slug": "com-dmzagent-skill-builder-mcp",
   "scanned_at": "2026-10-16T02:29:52+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/praeceptor-thesis/skill-builder-landing",
   "package": "npm:@dmzagent/skill-builder-mcp@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "736aa306da9d7bb8ae7a0791ca9b209af18044da",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 43,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 45,
     "reason": "scored on the declared repository at version 1.0.1, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "packages/cli/src/index.ts",
       "line": 24,
       "excerpt": "function openInBrowser(url: string): void {\n  const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';\n  execSync(`${cmd} \"${url}\"`);\n}\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "packages/cli/src/index.ts",
       "line": 24,
       "excerpt": "function openInBrowser(url: string): void {\n  const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';\n  execSync(`${cmd} \"${url}\"`);\n}\n",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/cli/src/anthropic.ts",
       "line": 109,
       "excerpt": "): Promise<Partial<SkillSpec>> {\n  const url = `${cfg.baseUrl || 'https://api.anthropic.com'}/v1/messages`;\n  const res = await fetch(url, {\n    method: 'POST',\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/cli/src/api/client.ts",
       "line": 201,
       "excerpt": "    }\n\n    const response = await fetch(url, {\n      headers: { ...headers, ...options?.headers },\n      ...options,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp/src/registry-client.ts",
       "line": 60,
       "excerpt": "    let response: Response;\n    try {\n      response = await fetch(url, {\n        ...options,\n        headers: { ...headers, ...(options.headers as Record<string, string>) },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 72,
       "excerpt": "    }\n\n    const response = await fetch(joinUrl(baseUrl, path), {\n      ...options,\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 83,
       "excerpt": "    listSkills: (params?: RegistrySearchParams) => {\n      const query = toSearchParams(params);\n      return request<SkillListResponse>(`/skills${query ? `?${query}` : ''}`, {\n        signal: params?.signal,\n      });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 88,
       "excerpt": "    },\n\n    getSkill: (id: string) => request<SkillResponse>(`/skills/${encodeURIComponent(id)}`),\n\n    saveSkill: (skill: SkillPayload) =>",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 91,
       "excerpt": "\n    saveSkill: (skill: SkillPayload) =>\n      request<SaveSkillResponse>('/skills', {\n        method: 'POST',\n        body: JSON.stringify(skill),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 97,
       "excerpt": "\n    updateSkill: (id: string, skill: Partial<SkillPayload>) =>\n      request<SkillResponse>(`/skills/${encodeURIComponent(id)}`, {\n        method: 'PATCH',\n        body: JSON.stringify(skill),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 103,
       "excerpt": "\n    forkSkill: (id: string, body?: { name?: string }) =>\n      request<ForkSkillResponse>(`/skills/${encodeURIComponent(id)}/fork`, {\n        method: 'POST',\n        body: JSON.stringify(body || {}),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 109,
       "excerpt": "\n    deleteSkill: (id: string) =>\n      request<{ success: boolean }>(`/skills/${encodeURIComponent(id)}`, {\n        method: 'DELETE',\n      }),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 114,
       "excerpt": "\n    createSkillBuilderSession: (payload: CreateSkillBuilderSessionRequest = {}) =>\n      request<CreateSkillBuilderSessionResponse>('/skill-builder/session', {\n        method: 'POST',\n        body: JSON.stringify(payload),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 120,
       "excerpt": "\n    getSkillBuilderSession: (sessionId: string) =>\n      request<{ session: SkillBuilderSession }>(`/skill-builder/session/${encodeURIComponent(sessionId)}`),\n\n    sendSkillBuilderTurn: (sessionId: string, payload: SkillBuilderTurnRequest) =>",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 123,
       "excerpt": "\n    sendSkillBuilderTurn: (sessionId: string, payload: SkillBuilderTurnRequest) =>\n      request<SkillBuilderTurnResponse>(`/skill-builder/session/${encodeURIComponent(sessionId)}`, {\n        method: 'POST',\n        body: JSON.stringify(payload),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 129,
       "excerpt": "\n    executeSkill: (id: string, payload: ExecuteSkillRequest) =>\n      request<ExecuteSkillResponse>(`/skills/${encodeURIComponent(id)}/execute`, {\n        method: 'POST',\n        body: JSON.stringify(payload),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 135,
       "excerpt": "\n    login: (email: string, password: string) =>\n      request<AuthResponse>('/auth/login', {\n        method: 'POST',\n        body: JSON.stringify({ email, password }),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 141,
       "excerpt": "\n    register: (name: string, email: string, password: string, handle: string) =>\n      request<AuthResponse>('/auth/register', {\n        method: 'POST',\n        body: JSON.stringify({ name, email, password, handle }),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/shared/src/api.ts",
       "line": 146,
       "excerpt": "      }),\n\n    getCurrentUser: () => request<{ user: User }>('/auth/me'),\n  };\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/web/src/services/api.ts",
       "line": 286,
       "excerpt": "async function fetchJson<T>(url: string, options?: RequestInit): Promise<T> {\n  const { headers: extraHeaders, ...rest } = options ?? {};\n  const response = await fetch(url, {\n    ...rest,\n    headers: { 'Content-Type': 'application/json', ...extraHeaders },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/migrate-zone.mjs",
       "line": 76,
       "excerpt": "      if (body) headers['content-type'] = 'application/json';\n      if (token) headers.authorization = `Bearer ${token}`;\n      const res = await fetch(url, { method, headers, body: body ? JSON.stringify(body) : undefined, signal: ctrl.signal });\n      const text = await res.text();\n      let json;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/skill-digest.mjs",
       "line": 106,
       "excerpt": "    const t = setTimeout(() => ctrl.abort(), timeoutMs);\n    try {\n      const res = await fetch(url, { signal: ctrl.signal, headers: { accept: 'application/json' } });\n      clearTimeout(t);\n      if (!res.ok) { lastErr = new Error(`HTTP ${res.status}`); continue; }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 11 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.exploit-intel/eip-mcp",
   "version": "0.3.9",
   "slug": "com-exploit-intel-eip-mcp",
   "scanned_at": "2026-10-16T02:29:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "pypi:eip-mcp@0.3.9",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.exploit-intel.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:698; Secret Keyword at README.md:669; Secret Keyword at eip_mcp.egg-info/PKG-INFO:698",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.findmetool/lookup",
   "version": "1.0.0",
   "slug": "com-findmetool-lookup",
   "scanned_at": "2026-10-16T02:29:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/findmetool/findmetool",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://findmetool.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/findmetool/findmetool) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.fintechstudios/studio",
   "version": "1.1.0",
   "slug": "com-fintechstudios-studio",
   "scanned_at": "2026-10-16T02:29:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Fintech-Studios-Apps/FTS-Web",
   "package": "npm:@fts-studio/studio-mcp@1.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (2 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.fintechstudios.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:22",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.footballagentindex/site",
   "version": "1.0.1",
   "slug": "com-footballagentindex-site",
   "scanned_at": "2026-10-16T02:30:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "",
   "source_state": "not_declared",
   "source_subject": "",
   "source_reason": "this server declares no source we know how to fetch",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://footballagentindex.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.gonkbot/mcp",
   "version": "1.0.0",
   "slug": "com-gonkbot-mcp",
   "scanned_at": "2026-10-16T02:30:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mfzeidan/gonkbot",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gonkbot.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/mfzeidan/gonkbot) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.gumballtools/iso-week",
   "version": "0.1.0",
   "slug": "com-gumballtools-iso-week",
   "scanned_at": "2026-10-16T02:30:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/bwalvoord/gumball",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://iso-week.gumballtools.com/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/bwalvoord/gumball) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.hankookilbo.mcp/hankookilbo-mcp",
   "version": "1.0.1",
   "slug": "com-hankookilbo-mcp-hankookilbo-mcp",
   "scanned_at": "2026-10-16T02:30:02+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/hkilbo/hankookilbo-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "0a2b4c9420a5394aafa69eedf85c01796652f48a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.hankookilbo.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 77 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (0 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.hasdata/amazon",
   "version": "1.0.3",
   "slug": "com-hasdata-amazon",
   "scanned_at": "2026-10-16T02:30:04+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/HasData/amazon-mcp",
   "package": "npm:@hasdata/amazon-mcp@1.0.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.hasdata.com/mcp?apis=amazon; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:78",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 4 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.hovercode/mcp",
   "version": "1.0.1",
   "slug": "com-hovercode-mcp",
   "scanned_at": "2026-10-16T02:30:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Hovercode-Ltd/hovercode-mcp",
   "package": "npm:hovercode-mcp@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://hovercode.com/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (HOVERCODE_API_TOKEN) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 32 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.hreflangly/site",
   "version": "1.0.1",
   "slug": "com-hreflangly-site",
   "scanned_at": "2026-10-16T02:30:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "",
   "source_state": "not_declared",
   "source_subject": "",
   "source_reason": "this server declares no source we know how to fetch",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://hreflangly.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.ilovevideoeditor/mcp-server",
   "version": "1.0.1",
   "slug": "com-ilovevideoeditor-mcp-server",
   "scanned_at": "2026-10-16T02:30:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ilovevideoeditor/mcp-server",
   "package": "npm:@ilovevideoeditor/mcp-server@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "ed93a3588865ec6cd1fa579785cc62a76c28a7e3",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/client.ts",
       "line": 48,
       "excerpt": "    };\n\n    const response = await fetch(url, {\n      method,\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:66",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 32,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 93 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 67.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (3 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 26,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'Apache-2.0' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.knowjudges/knowjudges",
   "version": "0.10.15",
   "slug": "com-knowjudges-knowjudges",
   "scanned_at": "2026-10-16T02:30:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/KnowJudges/knowjudges-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "2382d17f4cf11aa302f7625f202264b91d851857",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.knowjudges.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 4 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.mambabuilt/mcp-clay-to-instantly-smartlead-push",
   "version": "1.2.1",
   "slug": "com-mambabuilt-mcp-clay-to-instantly-smartlead-push",
   "scanned_at": "2026-10-16T02:30:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/mambalabsdev/mcp-clay-to-instantly-smartlead-push",
   "package": "npm:@mambalabsdev/mcp-clay-to-instantly-smartlead-push@1.2.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "6ce05ebcc1e7b384a62dc37c34111f0a4d2e9446",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 10 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.mambabuilt/mcp-tiktok-brand-presence-mapper",
   "version": "1.1.1",
   "slug": "com-mambabuilt-mcp-tiktok-brand-presence-mapper",
   "scanned_at": "2026-10-16T02:30:19+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/mambalabsdev/mcp-tiktok-brand-presence-mapper",
   "package": "npm:@mambalabsdev/mcp-tiktok-brand-presence-mapper@1.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "3e389687a43e01762c3489092948a74588ce26a1",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository at version 1.1.1, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/sync-input-schema-fixture.mjs",
       "line": 21,
       "excerpt": "const headers = { Authorization: `Bearer ${token}` };\nconst get = async (url) => {\n  const r = await fetch(url, { headers });\n  if (!r.ok) throw new Error(`${url} answered ${r.status}`);\n  return (await r.json()).data;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 9 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 3 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.mcpbundles/uk-court-finder",
   "version": "1.0.0",
   "slug": "com-mcpbundles-uk-court-finder",
   "scanned_at": "2026-10-16T02:30:22+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/thinkchainai/mcpbundles",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f0071aa1dc854a8e02ae90868489daf8f91ac3e2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.mcpbundles.com/bundle/uk-court-finder/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 57,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 58 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (0 issue(s) in the last 6 months, under `03` §5's floor of 3): 201.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 188 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.md-log/md-log-mcp",
   "version": "1.3.0",
   "slug": "com-md-log-md-log-mcp",
   "scanned_at": "2026-10-16T02:30:24+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/md-log/md-log-mcp",
   "package": "npm:md-log-mcp@1.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "579b5e04eb028bbc69fb335ef1528e621845c6fe",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 18,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 175,
       "excerpt": "    let res: Response;\n    try {\n      res = await fetch(url, { method, headers, body, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS) });\n    } catch (e) {\n      throw new MdlogError(",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 212,
       "excerpt": "    let res: Response;\n    try {\n      res = await fetch(url, {\n        method: \"PUT\",\n        headers: { \"Content-Type\": contentType, ...extraHeaders },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 303,
       "excerpt": "      let res: Response;\n      try {\n        res = await fetch(contentUrl, { signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS) });\n      } catch (e) {\n        throw new MdlogError(",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 12 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.meta-council/decision-intelligence",
   "version": "1.4.0",
   "slug": "com-meta-council-decision-intelligence",
   "scanned_at": "2026-10-16T02:30:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/daliu/meta-council",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): X-API-Key; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://meta-council.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/daliu/meta-council) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.metalroofcostcalculator/site",
   "version": "1.0.1",
   "slug": "com-metalroofcostcalculator-site",
   "scanned_at": "2026-10-16T02:30:30+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "",
   "source_state": "not_declared",
   "source_subject": "",
   "source_reason": "this server declares no source we know how to fetch",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://metalroofcostcalculator.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.mnemopay/gridstamp",
   "version": "1.2.0",
   "slug": "com-mnemopay-gridstamp",
   "scanned_at": "2026-10-16T02:30:30+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/mnemopay/gridstamp",
   "package": "npm:gridstamp@1.2.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 36,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 10 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at examples/agent-proof-of-presence.ts:22; Hex High Entropy String at tests/remoteid/f3411.test.ts:87; Secret Keyword at tests/stress/load.test.ts:42; Secret Keyword at tests/stress/mega-simulation.bench.ts:26; Secret Keyword at tests/stress/production-100k.test.ts:42; Secret Keyword at tests/stress/production-15k.test.ts:44; Secret Keyword at tests/stress/stress-200k.test.ts:66; Secret Keyword at tests/stress/stress-300k.test.ts:36; Secret Keyword at tests/stress/summer-2026-simulation.bench.ts:131; Hex High Entropy String at tests/utils/crypto.test.ts:92",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 45,
     "reason": "4 vulnerabilities could not be placed in `03` §6's table and are listed but not scored",
     "assessed_weight": "0.94",
     "fault": null,
     "evidence_omitted": 24,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 1.2.1 — GHSA-5p2g-fcmc-qvqq",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p2g-fcmc-qvqq",
       "finding": "image-size:GHSA-5p2g-fcmc-qvqq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "image-size 1.2.1 — GHSA-w3rx-r6r6-pgpr",
       "detail": "transitive, CVSS 8.7, fixed in 2.0.3",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w3rx-r6r6-pgpr",
       "finding": "image-size:GHSA-w3rx-r6r6-pgpr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "linkify-it 5.0.0 — GHSA-22p9-wv53-3rq4",
       "detail": "transitive, CVSS 8.7, fixed in 5.0.1",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-22p9-wv53-3rq4",
       "finding": "linkify-it:GHSA-22p9-wv53-3rq4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.2 — GHSA-fx2h-pf6j-xcff",
       "detail": "transitive, CVSS 8.2, fixed in 7.3.5",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.2",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.1",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "linkify-it 5.0.0 — GHSA-v245-v573-v5vm",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.2",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v245-v573-v5vm",
       "finding": "linkify-it:GHSA-v245-v573-v5vm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.10 — GHSA-6g55-p6wh-862q",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.12",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.10 — GHSA-r28c-9q8g-f849",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.18",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 11.1.0 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-xwg4-73v4-xw9w",
       "detail": "transitive, CVSS 7.4, fixed in 3.3.12",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xwg4-73v4-xw9w",
       "finding": "nanoid:GHSA-xwg4-73v4-xw9w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@vue/server-renderer 3.5.32 — GHSA-g2v6-rqmx-r4w6",
       "detail": "transitive, CVSS 7.2, fixed in 3.5.42",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g2v6-rqmx-r4w6",
       "finding": "@vue/server-renderer:GHSA-g2v6-rqmx-r4w6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-h8r8-wccr-v5f2",
       "detail": "transitive, CVSS 6.9, fixed in 3.3.2",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h8r8-wccr-v5f2",
       "finding": "dompurify:GHSA-h8r8-wccr-v5f2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-v9jr-rg53-9pgp",
       "detail": "transitive, CVSS 6.9, fixed in 3.4.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v9jr-rg53-9pgp",
       "finding": "dompurify:GHSA-v9jr-rg53-9pgp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sprintf-js 1.0.3 — GHSA-hp3w-g68c-fv3c",
       "detail": "transitive, CVSS 6.9",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hp3w-g68c-fv3c",
       "finding": "sprintf-js:GHSA-hp3w-g68c-fv3c",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-crv5-9vww-q3g8",
       "detail": "transitive, CVSS 6.8, fixed in 3.4.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crv5-9vww-q3g8",
       "finding": "dompurify:GHSA-crv5-9vww-q3g8",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "baseline-browser-mapping 2.10.20 — GHSA-w5vr-8v7q-w6rv",
       "detail": "transitive, CVSS 6.6, fixed in 2.11.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5vr-8v7q-w6rv",
       "finding": "baseline-browser-mapping:GHSA-w5vr-8v7q-w6rv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mermaid 11.14.0 — GHSA-3rrr-jr9j-h3q3",
       "detail": "transitive, CVSS 6.5, fixed in 11.16.1",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3rrr-jr9j-h3q3",
       "finding": "mermaid:GHSA-3rrr-jr9j-h3q3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "markdown-it 14.1.1 — GHSA-253c-mchw-3w2r",
       "detail": "transitive, CVSS 6.3, fixed in 14.3.1",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-253c-mchw-3w2r",
       "finding": "markdown-it:GHSA-253c-mchw-3w2r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.10 — GHSA-fxqj-rqcc-2cmp",
       "detail": "transitive, CVSS 6.3, fixed in 8.5.23",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp",
       "finding": "postcss:GHSA-fxqj-rqcc-2cmp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-76mc-f452-cxcm",
       "detail": "transitive, CVSS 6.1, fixed in 3.4.7",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-76mc-f452-cxcm",
       "finding": "dompurify:GHSA-76mc-f452-cxcm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.4.0 — GHSA-76mc-f452-cxcm",
       "detail": "transitive, CVSS 6.1, fixed in 3.4.7",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-76mc-f452-cxcm",
       "finding": "dompurify:GHSA-76mc-f452-cxcm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-hpcv-96wg-7vj8",
       "detail": "transitive, CVSS 6.1, fixed in 3.4.6",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hpcv-96wg-7vj8",
       "finding": "dompurify:GHSA-hpcv-96wg-7vj8",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.4.0 — GHSA-hpcv-96wg-7vj8",
       "detail": "transitive, CVSS 6.1, fixed in 3.4.6",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hpcv-96wg-7vj8",
       "finding": "dompurify:GHSA-hpcv-96wg-7vj8",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-r47g-fvhr-h676",
       "detail": "transitive, CVSS 6.1, fixed in 3.4.6",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r47g-fvhr-h676",
       "finding": "dompurify:GHSA-r47g-fvhr-h676",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.4.0 — GHSA-r47g-fvhr-h676",
       "detail": "transitive, CVSS 6.1, fixed in 3.4.6",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r47g-fvhr-h676",
       "finding": "dompurify:GHSA-r47g-fvhr-h676",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-v2wj-7wpq-c8vv",
       "detail": "transitive, CVSS 6.1, fixed in 3.3.2",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2wj-7wpq-c8vv",
       "finding": "dompurify:GHSA-v2wj-7wpq-c8vv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-h7mw-gpvr-xq4m",
       "detail": "transitive, CVSS 6.0, fixed in 3.4.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h7mw-gpvr-xq4m",
       "finding": "dompurify:GHSA-h7mw-gpvr-xq4m",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss-selector-parser 7.1.1 — GHSA-rj75-hqrm-r3gf",
       "detail": "transitive, CVSS 5.9, fixed in 7.1.6",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rj75-hqrm-r3gf",
       "finding": "postcss-selector-parser:GHSA-rj75-hqrm-r3gf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.2 — GHSA-v6wh-96g9-6wx3",
       "detail": "transitive, CVSS 5.5, fixed in 7.3.5",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v6wh-96g9-6wx3",
       "finding": "vite:GHSA-v6wh-96g9-6wx3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-39q2-94rc-95cp",
       "detail": "transitive, CVSS 5.3, fixed in 3.4.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-39q2-94rc-95cp",
       "finding": "dompurify:GHSA-39q2-94rc-95cp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-cj63-jhhr-wcxv",
       "detail": "transitive, CVSS 5.3, fixed in 3.3.2",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cj63-jhhr-wcxv",
       "finding": "dompurify:GHSA-cj63-jhhr-wcxv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "dompurify 3.2.7 — GHSA-cjmm-f4jc-qw8r",
       "detail": "transitive, CVSS 5.3, fixed in 3.3.2",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cjmm-f4jc-qw8r",
       "finding": "dompurify:GHSA-cjmm-f4jc-qw8r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-h67p-54hq-rp68",
       "detail": "transitive, CVSS 5.3, fixed in 3.15.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h67p-54hq-rp68",
       "finding": "js-yaml:GHSA-h67p-54hq-rp68",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-h67p-54hq-rp68",
       "detail": "transitive, CVSS 5.3, fixed in 4.2.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h67p-54hq-rp68",
       "finding": "js-yaml:GHSA-h67p-54hq-rp68",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "markdown-it 14.1.1 — GHSA-6v5v-wf23-fmfq",
       "detail": "transitive, CVSS 5.3, fixed in 14.2.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6v5v-wf23-fmfq",
       "finding": "markdown-it:GHSA-6v5v-wf23-fmfq",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mermaid 11.14.0 — GHSA-2v8p-3f2j-5mp7",
       "detail": "transitive, CVSS 5.3, fixed in 11.16.1",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v8p-3f2j-5mp7",
       "finding": "mermaid:GHSA-2v8p-3f2j-5mp7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mermaid 11.14.0 — GHSA-6m6c-36f7-fhxh",
       "detail": "transitive, CVSS 5.3, fixed in 11.15.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6m6c-36f7-fhxh",
       "finding": "mermaid:GHSA-6m6c-36f7-fhxh",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mermaid 11.14.0 — GHSA-6x64-9x62-f2gx",
       "detail": "transitive, CVSS 5.3, fixed in 11.16.1",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6x64-9x62-f2gx",
       "finding": "mermaid:GHSA-6x64-9x62-f2gx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mermaid 11.14.0 — GHSA-87f9-hvmw-gh4p",
       "detail": "transitive, CVSS 5.3, fixed in 11.15.0",
       "path": "gtm/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-87f9-hvmw-gh4p",
       "finding": "mermaid:GHSA-87f9-hvmw-gh4p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 45,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.mux/mcp",
   "version": "12.8.0",
   "slug": "com-mux-mcp",
   "scanned_at": "2026-10-16T02:30:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/muxinc/mux-node-sdk",
   "package": "npm:@mux/mcp@12.8.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 385,
   "files_pruned": 68,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 39,
     "reason": "68 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "code-tool-worker.js",
       "line": 26,
       "excerpt": "    try {\n        let run_ = async (client) => { };\n        eval(`\n      ${code}\n      run_ = run;",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "code-tool-worker.mjs",
       "line": 21,
       "excerpt": "    try {\n        let run_ = async (client) => { };\n        eval(`\n      ${code}\n      run_ = run;",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "src/code-tool-worker.ts",
       "line": 25,
       "excerpt": "  try {\n    let run_ = async (client: any) => {};\n    eval(`\n      ${code}\n      run_ = run;",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "compat.js",
       "line": 247,
       "excerpt": "            }\n            else {\n                result[key] = processed;\n            }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "compat.js",
       "line": 279,
       "excerpt": "            for (const key in firstVariant) {\n                if (key !== 'properties') {\n                    result[key] = firstVariant[key];\n                }\n            }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "compat.js",
       "line": 287,
       "excerpt": "    for (const key in result) {\n        if (result[key] && typeof result[key] === 'object') {\n            result[key] = removeAnyOf(result[key]);\n        }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "compat.js",
       "line": 318,
       "excerpt": "    for (const key in result) {\n        if (result[key] && typeof result[key] === 'object') {\n            result[key] = removeFormats(result[key], formatsCapability);\n        }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "compat.mjs",
       "line": 238,
       "excerpt": "            }\n            else {\n                result[key] = processed;\n            }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "compat.mjs",
       "line": 270,
       "excerpt": "            for (const key in firstVariant) {\n                if (key !== 'properties') {\n                    result[key] = firstVariant[key];\n                }\n            }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "compat.mjs",
       "line": 278,
       "excerpt": "    for (const key in result) {\n        if (result[key] && typeof result[key] === 'object') {\n            result[key] = removeAnyOf(result[key]);\n        }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "compat.mjs",
       "line": 309,
       "excerpt": "    for (const key in result) {\n        if (result[key] && typeof result[key] === 'object') {\n            result[key] = removeFormats(result[key], formatsCapability);\n        }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/compat.ts",
       "line": 311,
       "excerpt": "        delete result[key];\n      } else {\n        result[key] = processed;\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/compat.ts",
       "line": 349,
       "excerpt": "      for (const key in firstVariant) {\n        if (key !== 'properties') {\n          result[key] = firstVariant[key];\n        }\n      }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/compat.ts",
       "line": 359,
       "excerpt": "  for (const key in result) {\n    if (result[key] && typeof result[key] === 'object') {\n      result[key] = removeAnyOf(result[key] as JSONSchema);\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/compat.ts",
       "line": 398,
       "excerpt": "  for (const key in result) {\n    if (result[key] && typeof result[key] === 'object') {\n      result[key] = removeFormats(result[key] as JSONSchema, formatsCapability);\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) Authorization that are not required on every declared endpoint, and the source we fetched shows no enforcement — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://mcp.mux.com",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.mux.com; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:21; Secret Keyword at README.md:22; Secret Keyword at README.md:24",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 11 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 2 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 11 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.nlqdb/nlqdb",
   "version": "0.1.1",
   "slug": "com-nlqdb-nlqdb",
   "scanned_at": "2026-10-16T02:30:39+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/nlqdb/nlqdb",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "70701e4b1b966555a6484f9708b6c5afe2e0534b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 291,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "cli/internal/api/client.go",
       "line": 156,
       "excerpt": "\t\treader = bytes.NewReader(body)\n\t}\n\treq, err := http.NewRequestWithContext(ctx, method, c.BaseURL+path, reader)\n\tif err != nil {\n\t\treturn &APIError{Status: \"request_build_error\", Message: err.Error(), Path: path}",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/db/src/clickhouse-tinybird/adapter.ts",
       "line": 334,
       "excerpt": "    }\n\n    const res = await fetch(url, init);\n    if (!res.ok) {\n      // Tinybird error envelope: `{ error: \"...\", documentation: \"...\" }`.",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/db/src/clickhouse-tinybird/pipe-management.ts",
       "line": 293,
       "excerpt": "    }\n\n    const res = await fetch(url, init);\n    return readResponse(res);\n  };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/db/src/clickhouse-tinybird/query-log.ts",
       "line": 277,
       "excerpt": "\n  return async (request, signal) => {\n    const res = await fetch(url, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/eval/src/datasets/bird-mini.ts",
       "line": 84,
       "excerpt": "  } else {\n    const url = opts.questionsJsonUrl ?? HF_SQLITE_JSON_URL;\n    const res = await fetch(url);\n    if (!res.ok) {\n      throw new Error(`bird-mini: fetch ${url} failed: ${res.status} ${res.statusText}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 71,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (auth middleware) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.nlqdb.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "JSON Web Token at packages/otel/test/redact-pii.test.ts:14; …and 67 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (5 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 10 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "3 vulnerabilities could not be placed in `03` §6's table and are listed but not scored",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 238,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "astro 5.18.1 — GHSA-26w7-cxv4-gfx2",
       "detail": "direct, CVSS 9.8, fixed in 7.2.8",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26w7-cxv4-gfx2",
       "finding": "astro:GHSA-26w7-cxv4-gfx2",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.5.18 — GHSA-2xp9-vwfh-vxw4",
       "detail": "direct, CVSS 9.5, fixed in 15.5.24",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2xp9-vwfh-vxw4",
       "finding": "next:GHSA-2xp9-vwfh-vxw4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "happy-dom 15.11.7 — GHSA-37j7-fg3j-429f",
       "detail": "direct, CVSS 9.3, fixed in 20.0.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-37j7-fg3j-429f",
       "finding": "happy-dom:GHSA-37j7-fg3j-429f",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "better-auth 1.6.9 — GHSA-pw9m-5jxm-xr6h",
       "detail": "direct, CVSS 9.1, fixed in 1.6.11",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pw9m-5jxm-xr6h",
       "finding": "better-auth:GHSA-pw9m-5jxm-xr6h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.5.18 — GHSA-p293-qw3h-jr36",
       "detail": "direct, CVSS 9.0, fixed in 15.5.24",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p293-qw3h-jr36",
       "finding": "next:GHSA-p293-qw3h-jr36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "seroval 1.5.4 — GHSA-p6vx-979v-rg4c",
       "detail": "transitive, CVSS 9.8, fixed in 1.6.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p6vx-979v-rg4c",
       "finding": "seroval:GHSA-p6vx-979v-rg4c",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@nuxt/devtools 3.2.4 — GHSA-279x-mwfv-vcqv",
       "detail": "transitive, CVSS 9.6, fixed in 3.3.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-279x-mwfv-vcqv",
       "finding": "@nuxt/devtools:GHSA-279x-mwfv-vcqv",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@simple-git/argv-parser 1.1.1 — GHSA-v5rq-49vh-5v5c",
       "detail": "transitive, CVSS 9.2, fixed in 2.0.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v5rq-49vh-5v5c",
       "finding": "@simple-git/argv-parser:GHSA-v5rq-49vh-5v5c",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "shell-quote 1.8.3 — GHSA-w7jw-789q-3m8p",
       "detail": "transitive, CVSS 9.2, fixed in 1.8.4",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7jw-789q-3m8p",
       "finding": "shell-quote:GHSA-w7jw-789q-3m8p",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "simple-git 3.36.0 — GHSA-x6jw-m9v5-85vh",
       "detail": "transitive, CVSS 9.2, fixed in 4.0.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x6jw-m9v5-85vh",
       "finding": "simple-git:GHSA-x6jw-m9v5-85vh",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tar 7.5.15 — GHSA-23hp-3jrh-7fpw",
       "detail": "transitive, CVSS 9.2, fixed in 7.5.19",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-23hp-3jrh-7fpw",
       "finding": "tar:GHSA-23hp-3jrh-7fpw",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "tests/e2e/mcp/bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.33.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "direct, CVSS 8.9, fixed in 0.35.4",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "direct, CVSS 8.9, fixed in 0.35.4",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.33.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "direct, CVSS 8.9, fixed in 0.35.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "direct, CVSS 8.9, fixed in 0.35.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "happy-dom 15.11.7 — GHSA-6q6h-j7hj-3r64",
       "detail": "direct, CVSS 8.8, fixed in 20.8.8",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6q6h-j7hj-3r64",
       "finding": "happy-dom:GHSA-6q6h-j7hj-3r64",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nuxt 3.21.5 — GHSA-mm7m-92g8-7m47",
       "detail": "direct, CVSS 8.8, fixed in 3.21.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mm7m-92g8-7m47",
       "finding": "nuxt:GHSA-mm7m-92g8-7m47",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "better-auth 1.6.9 — GHSA-9h47-pqcx-hjr4",
       "detail": "direct, CVSS 8.7, fixed in 1.6.11",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9h47-pqcx-hjr4",
       "finding": "better-auth:GHSA-9h47-pqcx-hjr4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "better-auth 1.6.9 — GHSA-g38m-r43w-p2q7",
       "detail": "direct, CVSS 8.3, fixed in 1.6.11",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g38m-r43w-p2q7",
       "finding": "better-auth:GHSA-g38m-r43w-p2q7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "better-auth 1.6.9 — GHSA-qq9h-g4jm-xgf3",
       "detail": "direct, CVSS 8.3, fixed in 1.6.22",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qq9h-g4jm-xgf3",
       "finding": "better-auth:GHSA-qq9h-g4jm-xgf3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.5.18 — GHSA-89xv-2m56-2m9x",
       "detail": "direct, CVSS 8.3, fixed in 15.5.21",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-89xv-2m56-2m9x",
       "finding": "next:GHSA-89xv-2m56-2m9x",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.5.18 — GHSA-p9j2-gv94-2wf4",
       "detail": "direct, CVSS 8.3, fixed in 15.5.21",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p9j2-gv94-2wf4",
       "finding": "next:GHSA-p9j2-gv94-2wf4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.5.18 — GHSA-m99w-x7hq-7vfj",
       "detail": "direct, CVSS 8.2, fixed in 15.5.21",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m99w-x7hq-7vfj",
       "finding": "next:GHSA-m99w-x7hq-7vfj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "better-auth 1.6.9 — GHSA-7w99-5wm4-3g79",
       "detail": "direct, CVSS 8.1, fixed in 1.6.11",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7w99-5wm4-3g79",
       "finding": "better-auth:GHSA-7w99-5wm4-3g79",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nuxt 3.21.5 — GHSA-9473-5f9j-94wq",
       "detail": "direct, CVSS 8.1, fixed in 3.21.10",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9473-5f9j-94wq",
       "finding": "nuxt:GHSA-9473-5f9j-94wq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "better-auth 1.6.9 — GHSA-86j7-9j95-vpqj",
       "detail": "direct, CVSS 7.7, fixed in 1.6.13",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-86j7-9j95-vpqj",
       "finding": "better-auth:GHSA-86j7-9j95-vpqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "better-auth 1.6.9 — GHSA-fmh4-wcc4-5jm3",
       "detail": "direct, CVSS 7.7, fixed in 1.6.11",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fmh4-wcc4-5jm3",
       "finding": "better-auth:GHSA-fmh4-wcc4-5jm3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "better-auth 1.6.9 — GHSA-cq3f-vc6p-68fh",
       "detail": "direct, CVSS 7.6, fixed in 1.6.11",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cq3f-vc6p-68fh",
       "finding": "better-auth:GHSA-cq3f-vc6p-68fh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "tests/e2e/mcp/bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.1 — GHSA-2pvr-wf23-7pc7",
       "detail": "direct, CVSS 7.5, fixed in 6.4.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2pvr-wf23-7pc7",
       "finding": "astro:GHSA-2pvr-wf23-7pc7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "happy-dom 15.11.7 — GHSA-w4gp-fjgq-3q4g",
       "detail": "direct, CVSS 7.5, fixed in 20.8.9",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w4gp-fjgq-3q4g",
       "finding": "happy-dom:GHSA-w4gp-fjgq-3q4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nuxt 3.21.5 — GHSA-9pgf-384g-p7mv",
       "detail": "direct, CVSS 7.5, fixed in 3.21.10",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9pgf-384g-p7mv",
       "finding": "nuxt:GHSA-9pgf-384g-p7mv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nuxt 3.21.5 — GHSA-hxcr-hm88-mpq6",
       "detail": "direct, CVSS 7.5, fixed in 3.21.10",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxcr-hm88-mpq6",
       "finding": "nuxt:GHSA-hxcr-hm88-mpq6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "astro 5.18.1 — GHSA-8hv8-536x-4wqp",
       "detail": "direct, CVSS 7.1, fixed in 6.3.3",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8hv8-536x-4wqp",
       "finding": "astro:GHSA-8hv8-536x-4wqp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.18 — GHSA-88fw-hqm2-52qc",
       "detail": "direct, CVSS 7.1, fixed in 4.12.25",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88fw-hqm2-52qc",
       "finding": "hono:GHSA-88fw-hqm2-52qc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.19 — GHSA-88fw-hqm2-52qc",
       "detail": "direct, CVSS 7.1, fixed in 4.12.25",
       "path": "tests/e2e/mcp/bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88fw-hqm2-52qc",
       "finding": "hono:GHSA-88fw-hqm2-52qc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.33.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "direct, CVSS 7.0, fixed in 0.35.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "direct, CVSS 7.0, fixed in 0.35.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-cache-semantics 4.2.0 — GHSA-ch52-4w7c-c8xp",
       "detail": "transitive, CVSS 8.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ch52-4w7c-c8xp",
       "finding": "http-cache-semantics:GHSA-ch52-4w7c-c8xp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "linkify-it 5.0.0 — GHSA-22p9-wv53-3rq4",
       "detail": "transitive, CVSS 8.7, fixed in 5.0.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-22p9-wv53-3rq4",
       "finding": "linkify-it:GHSA-22p9-wv53-3rq4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "node-forge 1.4.0 — GHSA-86w9-cpqp-85rv",
       "detail": "transitive, CVSS 8.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-86w9-cpqp-85rv",
       "finding": "node-forge:GHSA-86w9-cpqp-85rv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "playwright 1.49.1 — GHSA-7mvr-c777-76hp",
       "detail": "transitive, CVSS 8.7, fixed in 1.55.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7mvr-c777-76hp",
       "finding": "playwright:GHSA-7mvr-c777-76hp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "shell-quote 1.8.3 — GHSA-395f-4hp3-45gv",
       "detail": "transitive, CVSS 8.7, fixed in 1.9.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-395f-4hp3-45gv",
       "finding": "shell-quote:GHSA-395f-4hp3-45gv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "tests/e2e/mcp/bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "tests/e2e/sdk/bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 46,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the only changelog is packages/sdk/CHANGELOG.md, inside a nested sub-project with its own package manifest — it describes that project, and whether it also covers this server cannot be told from the tree",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.nyxory/nyxory",
   "version": "0.12.4",
   "slug": "com-nyxory-nyxory",
   "scanned_at": "2026-10-16T02:30:52+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "npm:@nyxory/mcp@0.12.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.nyxory.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (NYXORY_API_TOKEN) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.octoparse/octoparse-mcp",
   "version": "1.0.0",
   "slug": "com-octoparse-octoparse-mcp",
   "scanned_at": "2026-10-16T02:30:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/octoparse/octoparse-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "3906b5edb3a7b638f0772cae6b911bf3a6d47bb9",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 80,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/handlers.ts",
       "line": 731,
       "excerpt": "\n    // Forward request to OIDC issuer\n    const response = await axios.get(targetUrl, {\n      timeout: 10000,\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.octoparse.com; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 7 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at docs/Configuration.md:96; Secret Keyword at src/tasks/execution-task-auth.ts:69; Secret Keyword at src/tasks/execution-task-service.ts:54; Secret Keyword at tests/execute-task-worker.test.mjs:334; Secret Keyword at tests/execution-task-auth.test.mjs:65; Secret Keyword at tests/execution-task-auth.test.mjs:162; Secret Keyword at tests/handlers-execute-task-compat.test.mjs:56",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "3 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 80 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 71,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "handlebars 4.7.8 — GHSA-2w6w-674q-4c4q",
       "detail": "transitive, CVSS 9.8, fixed in 4.7.9",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2w6w-674q-4c4q",
       "finding": "handlebars:GHSA-2w6w-674q-4c4q",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.8 — GHSA-8r5x-fm3f-whwj",
       "detail": "transitive, CVSS 9.8, fixed in 4.7.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8r5x-fm3f-whwj",
       "finding": "handlebars:GHSA-8r5x-fm3f-whwj",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.8 — GHSA-p8wg-vrv2-v86f",
       "detail": "transitive, CVSS 9.2, fixed in 4.7.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p8wg-vrv2-v86f",
       "finding": "handlebars:GHSA-p8wg-vrv2-v86f",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.24.3 — GHSA-8r9q-7v3j-jr4g",
       "detail": "direct, CVSS 8.7, fixed in 1.25.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8r9q-7v3j-jr4g",
       "finding": "@modelcontextprotocol/sdk:GHSA-8r9q-7v3j-jr4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-35jp-ww65-95wh",
       "detail": "direct, CVSS 8.7, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-35jp-ww65-95wh",
       "finding": "axios:GHSA-35jp-ww65-95wh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-p92q-9vqr-4j8v",
       "detail": "direct, CVSS 8.2, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p92q-9vqr-4j8v",
       "finding": "axios:GHSA-p92q-9vqr-4j8v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.2 — GHSA-fx2h-pf6j-xcff",
       "detail": "direct, CVSS 8.2, fixed in 7.3.5",
       "path": "web/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.24.3 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-43fc-jf86-j433",
       "detail": "direct, CVSS 7.5, fixed in 1.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-43fc-jf86-j433",
       "finding": "axios:GHSA-43fc-jf86-j433",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-62hf-57xw-28j9",
       "detail": "direct, CVSS 7.5, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-62hf-57xw-28j9",
       "finding": "axios:GHSA-62hf-57xw-28j9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-777c-7fjr-54vf",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-777c-7fjr-54vf",
       "finding": "axios:GHSA-777c-7fjr-54vf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-hfxv-24rg-xrqf",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hfxv-24rg-xrqf",
       "finding": "axios:GHSA-hfxv-24rg-xrqf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-j5f8-grm9-p9fc",
       "detail": "direct, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j5f8-grm9-p9fc",
       "finding": "axios:GHSA-j5f8-grm9-p9fc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 13.0.0 — GHSA-w5hq-g745-h8pq",
       "detail": "direct, CVSS 7.5, fixed in 13.0.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 8.3.2 — GHSA-w5hq-g745-h8pq",
       "detail": "direct, CVSS 7.5, fixed in 11.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-6chq-wfr3-2hj9",
       "detail": "direct, CVSS 7.4, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6chq-wfr3-2hj9",
       "finding": "axios:GHSA-6chq-wfr3-2hj9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-pf86-5x62-jrwf",
       "detail": "direct, CVSS 7.4, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pf86-5x62-jrwf",
       "finding": "axios:GHSA-pf86-5x62-jrwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-q8qp-cvcw-x6jj",
       "detail": "direct, CVSS 7.4, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8qp-cvcw-x6jj",
       "finding": "axios:GHSA-q8qp-cvcw-x6jj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-pmwg-cvhr-8vh7",
       "detail": "direct, CVSS 7.2, fixed in 1.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmwg-cvhr-8vh7",
       "finding": "axios:GHSA-pmwg-cvhr-8vh7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.24.3 — GHSA-345p-7cg4-v4c7",
       "detail": "direct, CVSS 7.1, fixed in 1.26.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-345p-7cg4-v4c7",
       "finding": "@modelcontextprotocol/sdk:GHSA-345p-7cg4-v4c7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.12.0 — GHSA-3g43-6gmg-66jw",
       "detail": "direct, CVSS 7.0, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3g43-6gmg-66jw",
       "finding": "axios:GHSA-3g43-6gmg-66jw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.4 — GHSA-hmw2-7cc7-3qxx",
       "detail": "transitive, CVSS 8.7, fixed in 4.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-3ppc-4f35-3m26",
       "detail": "transitive, CVSS 8.7, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3ppc-4f35-3m26",
       "finding": "minimatch:GHSA-3ppc-4f35-3m26",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 5.1.6 — GHSA-3ppc-4f35-3m26",
       "detail": "transitive, CVSS 8.7, fixed in 5.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3ppc-4f35-3m26",
       "finding": "minimatch:GHSA-3ppc-4f35-3m26",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 9.0.5 — GHSA-3ppc-4f35-3m26",
       "detail": "transitive, CVSS 8.7, fixed in 9.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3ppc-4f35-3m26",
       "finding": "minimatch:GHSA-3ppc-4f35-3m26",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "web/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.8 — GHSA-xjpj-3mr7-gcpf",
       "detail": "transitive, CVSS 8.2, fixed in 4.7.9",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xjpj-3mr7-gcpf",
       "finding": "handlebars:GHSA-xjpj-3mr7-gcpf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "web/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "web/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.8 — GHSA-3mfm-83xf-c92r",
       "detail": "transitive, CVSS 8.1, fixed in 4.7.9",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3mfm-83xf-c92r",
       "finding": "handlebars:GHSA-3mfm-83xf-c92r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.8 — GHSA-xhpv-hc6g-r9c6",
       "detail": "transitive, CVSS 8.1, fixed in 4.7.9",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xhpv-hc6g-r9c6",
       "finding": "handlebars:GHSA-xhpv-hc6g-r9c6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.2 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 2.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tmp 0.2.5 — GHSA-ph9p-34f9-6g65",
       "detail": "transitive, CVSS 7.7, fixed in 0.2.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ph9p-34f9-6g65",
       "finding": "tmp:GHSA-ph9p-34f9-6g65",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.2 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.2 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.2 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.2 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "web/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "web/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE.md present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.promptfrenzy/promptfrenzy",
   "version": "1.0.0",
   "slug": "com-promptfrenzy-promptfrenzy",
   "scanned_at": "2026-10-16T02:31:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Prompt-Frenzy/skills",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "2979602bedf48a771883a01a0e30d01d0f4cd291",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.promptfrenzy.com/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 29 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.sarabalawson/afromorphism",
   "version": "1.0.0",
   "slug": "com-sarabalawson-afromorphism",
   "scanned_at": "2026-10-16T02:31:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sarabalawson/website",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.sarabalawson.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/sarabalawson/website) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.see-geo/seegeo",
   "version": "1.0.1",
   "slug": "com-see-geo-seegeo",
   "scanned_at": "2026-10-16T02:31:04+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Tunisian-Aaron/seegeo",
   "package": "npm:seegeo-mcp@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (2 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://see-geo.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:27",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.serpdive/serpdive-mcp",
   "version": "0.1.4",
   "slug": "com-serpdive-serpdive-mcp",
   "scanned_at": "2026-10-16T02:31:05+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/serpdive/serpdive-mcp",
   "package": "npm:serpdive-mcp@0.1.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.serpdive.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:47",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 83 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 83 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.siftivo/siftivo",
   "version": "0.2.0",
   "slug": "com-siftivo-siftivo",
   "scanned_at": "2026-10-16T02:31:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/btg5679/siftivo",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.siftivo.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/btg5679/siftivo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.takocode/takocode",
   "version": "1.0.0",
   "slug": "com-takocode-takocode",
   "scanned_at": "2026-10-16T02:31:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/takocode-chimera/takocode-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "a7e24e985ce91af9d8568c42fe6fd87733e3889e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://takocode.com/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 51 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.trimtabist/us-tariff-ledger",
   "version": "0.3.1",
   "slug": "com-trimtabist-us-tariff-ledger",
   "scanned_at": "2026-10-16T02:31:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/mrsingh86/trimtab-ais",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "177d48cf4b5bd59074c34e5e7c0ad0e170b5af11",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "bin/cli.js",
       "line": 27,
       "excerpt": "      if (!line) continue;\n      try {\n        const res = await fetch(ENDPOINT, {\n          method: 'POST', headers: { 'Content-Type': 'application/json' }, body: line,\n        });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "index.js",
       "line": 12,
       "excerpt": "let _id = 0;\nasync function rpc(method, params, endpoint = ENDPOINT) {\n  const res = await fetch(endpoint, {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://trimtabist.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 66 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.uibeats/mcp",
   "version": "0.1.3",
   "slug": "com-uibeats-mcp",
   "scanned_at": "2026-10-16T02:31:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/nikhils4/ui-beats",
   "package": "npm:@uibeats/mcp@0.1.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "e1c367ac0a62f179f881fcdeab1ff1449bb792eb",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/catalogue.ts",
       "line": 60,
       "excerpt": "\nasync function fetchJson(url: string): Promise<unknown> {\n  const response = await fetch(url, {\n    headers: { accept: \"application/json\" },\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/catalogue.ts",
       "line": 106,
       "excerpt": "  // catalogue, so pointing at localhost actually stays on localhost.\n  const url = `${ORIGIN}/docs/${entry.category}/${entry.name}.md`;\n  const response = await fetch(url, { headers: { accept: \"text/markdown\" } });\n  if (!response.ok) {\n    throw new Error(",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 61 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (0 issue(s) in the last 6 months, under `03` §5's floor of 3): 0.6 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 4 days (by tags), last release 54 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE.md present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "com.whichmadvisor/site",
   "version": "1.0.1",
   "slug": "com-whichmadvisor-site",
   "scanned_at": "2026-10-16T02:31:19+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "",
   "source_state": "not_declared",
   "source_subject": "",
   "source_reason": "this server declares no source we know how to fetch",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://whichmadvisor.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "dev.filetopdf/filetopdf-mcp",
   "version": "0.1.1",
   "slug": "dev-filetopdf-filetopdf-mcp",
   "scanned_at": "2026-10-16T02:31:19+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/FileToPDF/filetopdf-mcp",
   "package": "npm:filetopdf-mcp@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "1008c3dfc0eb6a72bc208b8f241b042fa5a3e5d4",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/api.ts",
       "line": 57,
       "excerpt": "      v = \"true\";\n    }\n    out[key] = String(v);\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): x-api-key; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.filetopdf.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:49",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 32,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 128 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 66.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "dev.primitive/email",
   "version": "0.2.0",
   "slug": "dev-primitive-email",
   "scanned_at": "2026-10-16T02:31:22+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/primitivedotdev/primitive-mono-repo",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.primitive.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/primitivedotdev/primitive-mono-repo) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "dev.specpilot/specpilot",
   "version": "1.0.0",
   "slug": "dev-specpilot-specpilot",
   "scanned_at": "2026-10-16T02:31:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/girishr/SpecPilot",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "34cd658c849de215e2b7ca255e442848ca351977",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 85,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 80,
     "reason": "32 findings in test code are listed but not deducted",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 1,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/core/chatFlow.ts",
       "line": 1196,
       "excerpt": "    if (key === 'integrations') {\n      const m = Object.fromEntries(Object.entries(map(a, key)).map(([k, v]) => [k, v.filter(x => x !== 'None')]).filter(([, v]) => v.length));\n      if (Object.keys(m).length) body[key] = m;\n    } else if (q.type === 'text') {\n      if (typeof value === 'string' && value.trim()) body[key] = value.trim();",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/core/chatFlow.ts",
       "line": 1198,
       "excerpt": "      if (Object.keys(m).length) body[key] = m;\n    } else if (q.type === 'text') {\n      if (typeof value === 'string' && value.trim()) body[key] = value.trim();\n    } else if (q.type === 'choice' || q.type === 'cards') {\n      const v = typeof value === 'string' ? labelsOf(q, [value]) : [];",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/core/chatFlow.ts",
       "line": 1201,
       "excerpt": "    } else if (q.type === 'choice' || q.type === 'cards') {\n      const v = typeof value === 'string' ? labelsOf(q, [value]) : [];\n      if (v.length) body[key] = v[0];\n    } else {\n      const v = labelsOf(q, asArray(value));",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/core/chatFlow.ts",
       "line": 1204,
       "excerpt": "    } else {\n      const v = labelsOf(q, asArray(value));\n      if (v.length) body[key] = v;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/core/render.ts",
       "line": 96,
       "excerpt": "      );\n    }\n    if (present(value)) out[key] = value;\n  }\n  return out as OptionalFields;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/utils/specSetup.ts",
       "line": 124,
       "excerpt": "  for (const language of SUPPORTED_LANGUAGES) {\n    const list = getFrameworksForLanguage(language);\n    if (list.length) frameworks[language] = ['none', ...list];\n  }\n  return frameworks;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/commands/serve.ts",
       "line": 55,
       "excerpt": "function loopback(port: number, method: string, path: string, headers: Record<string, string> = {}, body?: string): Promise<{ status: number; body: string }> {\n  return new Promise((resolveRequest, reject) => {\n    const req = request({ host: '127.0.0.1', port, method, path, headers, timeout: 5000, agent: false }, res => {\n      let text = '';\n      res.setEncoding('utf8');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": "2026-10-12",
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/utils/codeAnalyzer.ts",
       "line": 106,
       "excerpt": "    testFiles.forEach(file => {\n      try {\n        const content = readFileSync(join(dir, file), 'utf-8');\n        \n        // Count test cases",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/utils/specServer.ts",
       "line": 1002,
       "excerpt": "      }\n      const ui = UI_ROUTES[url.pathname];\n      if (ui) return send(res, 200, ui[1], readFileSync(join(UI_DIR, ui[0])));\n      if (url.pathname !== '/api/specs' && url.pathname !== '/api/file' && url.pathname !== '/api/events') return send(res, 404, TEXT, 'Not Found\\n');\n      const i = projectIndex(url, roots.length);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/utils/specSetup.ts",
       "line": 374,
       "excerpt": "      createdFiles.push(target);\n      try {\n        writeSync(fd, readFileSync(join(staging, ...rel.split('/'))));\n        fsyncSync(fd);\n      } finally {",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 47,
       "excerpt": "  if(p in fileCache)return fileCache[p];\n  const pj=PROJECT;\n  const r=await fetch('/api/file?project='+pj+'&p='+encodeURIComponent(p),{cache:'no-store'});\n  if(!r.ok)throw Object.assign(new Error(p+': HTTP '+r.status),{status:r.status});\n  const text=await r.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 293,
       "excerpt": "  let r,body={};\n  try{\n    r=await fetch('/api/commands/regenerate?'+pq(),{method:'POST',cache:'no-store',headers:{'Content-Type':'application/json','X-SpecPilot-Token':TOKEN},body:'{}'});\n    body=await r.json().catch(()=>({}));\n  }catch(e){r=null;}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 429,
       "excerpt": "  let r,body={};\n  try{\n    r=await fetch('/api/tasks/move?'+pq(),{method:'POST',cache:'no-store',headers:{'Content-Type':'application/json','X-SpecPilot-Token':TOKEN,'If-Match':DATA.tasks.sha256},body:JSON.stringify({id:t.id,toSection,toIndex})});\n    body=await r.json().catch(()=>({}));\n  }catch(e){moving=false;toast('The server did not answer. Nothing was moved.');return;}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 463,
       "excerpt": "  let r,body={};\n  try{\n    r=await fetch('/api/tasks/new?'+pq(),{method:'POST',cache:'no-store',headers:{'Content-Type':'application/json','X-SpecPilot-Token':TOKEN,'If-Match':DATA.tasks.sha256},body:JSON.stringify({description:taskIn.value,section})});\n    body=await r.json().catch(()=>({}));\n  }catch(e){r=null;}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 617,
       "excerpt": "async function redraw(paths){\n  let d;const p=PROJECT;\n  try{const r=await fetch('/api/specs?'+pq(),{cache:'no-store'});if(!r.ok)return;d=await r.json();}catch(e){return;} // server gone: keep what is shown\n  if(p!==PROJECT)return; // switched projects meanwhile\n  // The poller's echo of a move this page just made: same tasks.md hash, nothing to redraw.",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 664,
       "excerpt": "  const was=PROJECT;PROJECT=n;\n  let d;\n  try{const r=await fetch('/api/specs?'+pq(),{cache:'no-store'});if(!r.ok)throw new Error('/api/specs: HTTP '+r.status);d=await r.json();}\n  catch(e){if(PROJECT===n)PROJECT=was;toast('Could not load the project: '+e.message);return;}\n  if(PROJECT!==n)return;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 729,
       "excerpt": "}\nasync function postPath(path,url){\n  const r=await fetch(url,{method:'POST',cache:'no-store',headers:{'Content-Type':'application/json','X-SpecPilot-Token':TOKEN},body:JSON.stringify({path})});\n  return {r,res:await r.json().catch(()=>({}))};\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 853,
       "excerpt": "$('#gDone').classList.add('closed');\nPROJECT=resolveRoute(curHash(),{},Infinity).project;\nfetch('/api/specs?'+pq(),{cache:'no-store'})\n  .then(r=>{if(!r.ok&&PROJECT){PROJECT=0;return fetch('/api/specs?'+pq(),{cache:'no-store'});}return r;})\n  .then(r=>{if(!r.ok)throw new Error('/api/specs: HTTP '+r.status);return r.json();})",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "ui/app.js",
       "line": 854,
       "excerpt": "PROJECT=resolveRoute(curHash(),{},Infinity).project;\nfetch('/api/specs?'+pq(),{cache:'no-store'})\n  .then(r=>{if(!r.ok&&PROJECT){PROJECT=0;return fetch('/api/specs?'+pq(),{cache:'no-store'});}return r;})\n  .then(r=>{if(!r.ok)throw new Error('/api/specs: HTTP '+r.status);return r.json();})\n  .then(d=>{DATA=d;renderProject();renderTasks();renderIde();renderAgentFiles();route();listen();})",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "src/__tests__/slashCommandGenerator.test.ts",
       "line": 432,
       "excerpt": "    const start = src.indexOf('const skillContent = `') + 'const skillContent = `'.length;\n    const literal = src.slice(start, src.indexOf('`;\\n', start));\n    const template = new Function(`return \\`${literal}\\`;`)() as string;\n    return (c: { projectName: string; language: string; framework?: string }) =>\n      template",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": "2026-10-12",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__browser__/home.browser.test.ts",
       "line": 128,
       "excerpt": "  let bin: string;\n  let realPath: string | undefined;\n  const go = (step: string) => writeFileSync(join(bin, step), '');\n  beforeEach(() => {\n    bin = join(env.base, 'bin');",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-11",
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__browser__/setupview.browser.test.ts",
       "line": 28,
       "excerpt": "  new Promise<number>((resolve, reject) => {\n    const body = JSON.stringify(msg);\n    const req = request(`${srv.url}/mcp`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-SpecPilot-Token': srv.handle.mcpToken!, 'Content-Length': Buffer.byteLength(body) } }, res => {\n      res.resume();\n      res.on('end', () => resolve(res.statusCode!));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": "2026-10-13",
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__browser__/setupview.browser.test.ts",
       "line": 39,
       "excerpt": "  new Promise<{ structuredContent: { project: number; written: string[]; validate: { errors: string[]; warnings: string[] } }; isError?: boolean; content: { text: string }[] }>((resolve, reject) => {\n    const body = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/call', params: { name, arguments: args } });\n    const req = request(`${srv.url}/mcp`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-SpecPilot-Token': srv.handle.mcpToken!, 'Content-Length': Buffer.byteLength(body) } }, res => {\n      let text = '';\n      res.on('data', c => (text += c));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": "2026-10-13",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__browser__/views.browser.test.ts",
       "line": 106,
       "excerpt": "const cursorOn = (root: string) => {\n  mkdirSync(join(root, '.cursor', 'rules'), { recursive: true });\n  writeFileSync(join(root, ...RULES), '---\\nalwaysApply: true\\n---\\n');\n};\nconst onboarding = (prompt: string) => `---\\ntitle: Onboarding Prompt\\n---\\n\\n> **One-time file — delete after use.**\\n\\n---\\n\\n${prompt}\\n`;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-11",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__browser__/views.browser.test.ts",
       "line": 135,
       "excerpt": "  const prompt = 'You are the specification co-pilot for \"spec-project\".\\nFill every file & keep #IDs, 100% of them. Étape 日本.';\n  let r = await rev(page);\n  writeFileSync(join(env.project, ...ONB), onboarding(prompt));\n  await redrawn(page, r);\n  const items = await ideItems(page);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-11",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__browser__/views.browser.test.ts",
       "line": 170,
       "excerpt": "  expect(routeJs.cursorPromptUrl(long)).toBeNull();\n  r = await rev(page);\n  writeFileSync(join(env.project, ...ONB), onboarding(long));\n  await redrawn(page, r);\n  expect((await ideItems(page))[1]).toEqual(['Send onboarding prompt to Cursor', null]);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-11",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/folderPicker.test.ts",
       "line": 21,
       "excerpt": "/** A stub dialog: logs its arguments one per line, its working directory and pid, then acts on STUB_MODE. */\nfunction installStub(name: string): void {\n  writeFileSync(\n    join(bin, name),\n    `#!/bin/sh",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-12",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/folderPicker.test.ts",
       "line": 39,
       "excerpt": "  );\n}\nconst logged = (what: string) => readFileSync(`${log}.${what}`, 'utf-8');\nconst args = () => logged('args').replace(/\\n$/, '').split('\\n');\nconst alive = (pid: number) => {",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-12",
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/folderPicker.test.ts",
       "line": 210,
       "excerpt": "    const h: Record<string, string> = {};\n    for (const [k, v] of Object.entries(headers)) if (v !== undefined) h[k] = v;\n    req = request({ host: '127.0.0.1', port, path, method, headers: h }, res => {\n      let text = '';\n      res.setEncoding('utf8');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": "2026-10-12",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/gitClone.test.ts",
       "line": 479,
       "excerpt": "  let log: string;\n  let target: string;\n  const logged = (what: string) => readFileSync(`${log}.${what}`, 'utf-8').trim();\n  const envOf = () => Object.fromEntries(logged('env').split('\\n').map(l => [l.slice(0, l.indexOf('=')), l.slice(l.indexOf('=') + 1)]));\n  beforeEach(() => {",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/gitClone.test.ts",
       "line": 637,
       "excerpt": "  return new Promise((resolve, reject) => {\n    let text = '';\n    const req = request({ host: '127.0.0.1', port, path, headers: { Host: `127.0.0.1:${port}` } }, res => {\n      res.setEncoding('utf8');\n      res.on('data', c => (text += c));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/gitClone.test.ts",
       "line": 654,
       "excerpt": "    const h: Record<string, string> = {};\n    for (const [k, v] of Object.entries(headers)) if (v !== undefined) h[k] = v;\n    req = request({ host: '127.0.0.1', port, path, method, headers: h }, res => {\n      let text = '';\n      res.setEncoding('utf8');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/gitClone.test.ts",
       "line": 694,
       "excerpt": "  const clone = (over: Record<string, unknown> = {}, headers = good()) => post('/api/projects/clone', { url: URL, parent, name: '', ...over }, headers).answer;\n  const projects = async () => (await get('/api/specs')).json.projects as unknown[];\n  const logged = (what: string) => readFileSync(`${log}.${what}`, 'utf-8').trim();\n  const stubRan = () => existsSync(`${log}.args`);\n  const stubGone = () => until(() => !alive(Number(logged('pid'))) && !alive(Number(logged('child'))));",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/projectDetector.test.ts",
       "line": 419,
       "excerpt": "    ])('a Node project with %j uses %s', async (locks, expected) => {\n      pkg();\n      for (const f of locks) writeFileSync(join(testDir, f), '');\n      expect((await more())!.packageManager).toBe(expected);\n    });",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-12",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/projectDetector.test.ts",
       "line": 429,
       "excerpt": "    ])('a Python project with %j uses %s', async (locks, expected) => {\n      writeFileSync(join(testDir, 'requirements.txt'), 'flask\\n');\n      for (const f of locks) writeFileSync(join(testDir, f), '');\n      expect((await more())!.packageManager).toBe(expected);\n    });",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-12",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/slashCommandGenerator.test.ts",
       "line": 183,
       "excerpt": "          for (const f of readdirSync(join(dir, sub))) {\n            const rel = `${sub}/${f}`;\n            if (!(KNOWN_COMMAND_HASHES[rel] ?? []).includes(sha(readFileSync(join(dir, sub, f))))) missing.push(rel);\n          }\n        }",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/slashCommandGenerator.test.ts",
       "line": 530,
       "excerpt": "    for (const f of render(initOptions('', 'app', { projectType: 'greenfield', language: 'typescript', framework: 'react', apiParadigm, handle: 'jsmith', ide: 'claude-code', whatItDoes: '', targetUsers: '', expectedScale: '', constraints: '' } as never)).files) {\n      mkdirSync(dirname(join(dir, f.path)), { recursive: true });\n      writeFileSync(join(dir, f.path), f.content);\n    }\n  };",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specCore.test.ts",
       "line": 53,
       "excerpt": "    const p = rel ? `${rel}/${e.name}` : e.name;\n    if (e.isDirectory()) Object.assign(out, walk(root, p));\n    else if (e.isFile()) out[p] = readFileSync(join(root, p), 'utf-8');\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specCore.test.ts",
       "line": 130,
       "excerpt": "\n  test.each(files)('%s imports only handlebars and files beside it, and uses no Node global', file => {\n    const source = readFileSync(join(core, file), 'utf-8');\n    const specifiers = [...source.matchAll(/^(?:import|export)\\s[^'\"]*from\\s+'([^']+)'/gm)].map(m => m[1]);\n    for (const s of specifiers) expect(s === 'handlebars' || /^\\.\\/[A-Za-z]+$/.test(s)).toBe(true);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specPoller.test.ts",
       "line": 31,
       "excerpt": "function write(root: string, rel: string, content: string): void {\n  mkdirSync(join(root, rel, '..'), { recursive: true });\n  writeFileSync(join(root, rel), content);\n}\n",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specServer.test.ts",
       "line": 51,
       "excerpt": "function write(root: string, rel: string, content: string): void {\n  mkdirSync(join(root, rel, '..'), { recursive: true });\n  writeFileSync(join(root, rel), content);\n}\n",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/specServer.test.ts",
       "line": 305,
       "excerpt": "function hit(port: number, path: string, opts: { method?: string; host?: string } = {}) {\n  return new Promise<{ status: number; headers: Record<string, unknown>; body: string }>((resolve, reject) => {\n    const req = request(\n      { host: '127.0.0.1', port, path, method: opts.method ?? 'GET', headers: { Host: opts.host ?? `127.0.0.1:${port}` } },\n      res => {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specServer.test.ts",
       "line": 414,
       "excerpt": "    for (const f of readdirSync(ui)) {\n      expect(f).not.toMatch(/\\.(woff2?|ttf|otf|eot)$/i);\n      expect(readFileSync(join(ui, f), 'utf-8')).not.toMatch(/@font-face|fonts\\.googleapis|fonts\\.gstatic/);\n    }\n    const ofl = readFileSync(join(ui, 'OFL-Sixtyfour.txt'), 'utf-8');",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/specServer.test.ts",
       "line": 640,
       "excerpt": "    (resolve, reject) => {\n      let text = '';\n      const req = request({ host: '127.0.0.1', port, path, headers: { Host: host } }, res => {\n        res.setEncoding('utf8');\n        res.on('data', c => (text += c));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/specServer.test.ts",
       "line": 1200,
       "excerpt": "    const h: Record<string, string | string[]> = {};\n    for (const [k, v] of Object.entries(headers)) if (v !== undefined) h[k] = v;\n    const req = request({ host: '127.0.0.1', port, path, method: 'POST', headers: h }, res => {\n      let text = '';\n      res.setEncoding('utf8');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specServer.test.ts",
       "line": 2050,
       "excerpt": "    const p = rel ? `${rel}/${e.name}` : e.name;\n    if (e.isDirectory()) Object.assign(out, snapshot(root, p));\n    else if (e.isFile()) out[p] = readFileSync(join(root, p), 'utf-8');\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specServer.test.ts",
       "line": 2504,
       "excerpt": "    const marked = (root: string, name: string) => {\n      mkdirSync(join(root, name));\n      writeFileSync(join(root, name, STAGING_MARKER), 'm\\n');\n      writeFileSync(join(root, name, 'CLAUDE.md'), 'staged\\n');\n    };",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specServer.test.ts",
       "line": 2532,
       "excerpt": "    if (process.getuid && process.getuid() === 0) return; // root ignores folder permissions\n    mkdirSync(join(e.root, '.specpilot-setup-0123456789ab'));\n    writeFileSync(join(e.root, '.specpilot-setup-0123456789ab', STAGING_MARKER), 'm\\n');\n    chmodSync(join(e.root, '.specpilot-setup-0123456789ab'), 0o500); // its contents cannot be unlinked\n    try {",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specSetup.test.ts",
       "line": 36,
       "excerpt": "    const p = rel ? `${rel}/${e.name}` : e.name;\n    if (e.isDirectory()) Object.assign(out, tree(root, p));\n    else if (e.isFile()) out[p] = readFileSync(join(root, p));\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-13",
       "deducts": false
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/__tests__/specSetup.test.ts",
       "line": 48,
       "excerpt": "  for (const [rel, content] of Object.entries(files)) {\n    mkdirSync(join(root, rel, '..'), { recursive: true });\n    writeFileSync(join(root, rel), content);\n  }\n  return { base, root };",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": "2026-10-13",
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (auth middleware) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://init.specpilot.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 184 credential-shaped string(s), every one from a keyword or entropy heuristic (Basic Auth Credentials, Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Basic Auth Credentials at .specs/quality/tests.md:65; Basic Auth Credentials at .specs/quality/tests.md:103; Hex High Entropy String at src/__tests__/__snapshots__/specCore.test.ts.snap:5; Hex High Entropy String at src/__tests__/__snapshots__/specCore.test.ts.snap:6; Hex High Entropy String at src/__tests__/__snapshots__/specCore.test.ts.snap:7; Hex High Entropy String at src/__tests__/__snapshots__/specCore.test.ts.snap:8; Hex High Entropy String at src/__tests__/__snapshots__/specCore.test.ts.snap:9; Hex High Entropy String at src/__tests__/__snapshots__/specCore.test.ts.snap:10; Hex High Entropy String at src/__tests__/__snapshots__/specCore.test.ts.snap:11; Hex High Entropy String at src/__tests__/__snapshots__/specCore.test.ts.snap:12; …and 174 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 3.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "handlebars 4.7.9 — GHSA-8r5x-fm3f-whwj",
       "detail": "direct, CVSS 9.8, fixed in 4.7.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8r5x-fm3f-whwj",
       "finding": "handlebars:GHSA-8r5x-fm3f-whwj",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.9 — GHSA-p8wg-vrv2-v86f",
       "detail": "direct, CVSS 9.2, fixed in 4.7.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p8wg-vrv2-v86f",
       "finding": "handlebars:GHSA-p8wg-vrv2-v86f",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-2883-xcg3-v3hh",
       "detail": "direct, CVSS 7.5, fixed in 3.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-2883-xcg3-v3hh",
       "detail": "direct, CVSS 7.5, fixed in 4.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-52cp-r559-cp3m",
       "detail": "direct, CVSS 7.5, fixed in 3.15.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-52cp-r559-cp3m",
       "detail": "direct, CVSS 7.5, fixed in 4.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-5p4m-2wfm-xmqj",
       "detail": "direct, CVSS 7.5, fixed in 3.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-5p4m-2wfm-xmqj",
       "detail": "direct, CVSS 7.5, fixed in 4.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.3 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 2.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 5.0.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.3 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.3 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.3 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.3 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.9",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.26.2 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.26.2 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-h67p-54hq-rp68",
       "detail": "direct, CVSS 5.3, fixed in 3.15.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h67p-54hq-rp68",
       "finding": "js-yaml:GHSA-h67p-54hq-rp68",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-h67p-54hq-rp68",
       "detail": "direct, CVSS 5.3, fixed in 4.2.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h67p-54hq-rp68",
       "finding": "js-yaml:GHSA-h67p-54hq-rp68",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.9 — GHSA-xw65-4hp5-5hc7",
       "detail": "direct, CVSS 4.7, fixed in 4.7.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xw65-4hp5-5hc7",
       "finding": "handlebars:GHSA-xw65-4hp5-5hc7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sprintf-js 1.0.3 — GHSA-hp3w-g68c-fv3c",
       "detail": "transitive, CVSS 6.9",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hp3w-g68c-fv3c",
       "finding": "sprintf-js:GHSA-hp3w-g68c-fv3c",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "baseline-browser-mapping 2.8.6 — GHSA-w5vr-8v7q-w6rv",
       "detail": "transitive, CVSS 6.6, fixed in 2.11.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5vr-8v7q-w6rv",
       "finding": "baseline-browser-mapping:GHSA-w5vr-8v7q-w6rv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@humanfs/node 0.16.7 — GHSA-p498-v437-472g",
       "detail": "transitive, CVSS 5.7, fixed in 0.16.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p498-v437-472g",
       "finding": "@humanfs/node:GHSA-p498-v437-472g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.13 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.0.3 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 2.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 5.0.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@babel/core 7.28.4 — GHSA-4x5r-pxfx-6jf8",
       "detail": "transitive, CVSS 3.2, fixed in 7.29.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4x5r-pxfx-6jf8",
       "finding": "@babel/core:GHSA-4x5r-pxfx-6jf8",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": ".specs/security/security-decisions.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "dev.uptimepage/uptimepage",
   "version": "1.0.0",
   "slug": "dev-uptimepage-uptimepage",
   "scanned_at": "2026-10-16T02:31:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/uptimepage/uptimepage",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "fa00f2009f70ca8f5eb70a8963230091cb7a8ccd",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 65,
   "files_pruned": 3,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 83,
     "reason": "3 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/charts/_init.js",
       "line": 59,
       "excerpt": "\nexport async function fetchJson(url) {\n    const res = await fetch(url, { headers: { Accept: \"application/json\" } });\n    if (!res.ok) throw new Error(`${url} → ${res.status}`);\n    return res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/check_form.js",
       "line": 354,
       "excerpt": "        let res;\n        try {\n            res = await fetch(form.dataset.action, {\n                method: form.dataset.method,\n                headers: jsonHeaders(),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/escalation_policies.js",
       "line": 51,
       "excerpt": "            let res;\n            try {\n                res = await fetch(form.dataset.action, {\n                    method: form.dataset.method,\n                    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/incidents_console.js",
       "line": 25,
       "excerpt": "\n  async function post(url, body) {\n    const r = await fetch(url, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/incidents_tab.js",
       "line": 76,
       "excerpt": "        body.innerHTML = `<span class=\"font-mono text-xs text-quiet\"># loading timeline…</span>`;\n        try {\n            const r = await fetch(url, { headers: { \"Accept\": \"application/json\" } });\n            if (!r.ok) throw new Error(`HTTP ${r.status}`);\n            const json = await r.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/monitors_list.js",
       "line": 96,
       "excerpt": "    const url = bar.dataset.actionUrl || \"/api/v1/targets/bulk-action\";\n    try {\n      const r = await fetch(url, {\n        method: \"POST\",\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/monitors_list.js",
       "line": 195,
       "excerpt": "    const url = (bar && bar.dataset.actionUrl) || \"/api/v1/targets/bulk-action\";\n    try {\n      const r = await fetch(url, {\n        method: \"POST\",\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/notification_channels.js",
       "line": 267,
       "excerpt": "            showResult(\"# sending test alert…\", \"text-quiet\");\n            try {\n                const res = await fetch(url, {\n                    method: \"POST\",\n                    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/notification_channels.js",
       "line": 601,
       "excerpt": "            let body;\n            try {\n                const res = await fetch(o.endpoint, {\n                    method: \"POST\",\n                    headers: { ...headers, \"Content-Type\": \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/notification_channels.js",
       "line": 703,
       "excerpt": "            let res;\n            try {\n                res = await fetch(form.dataset.action, {\n                    method: form.dataset.method,\n                    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/on_call_list.js",
       "line": 17,
       "excerpt": "        const id = cell.getAttribute(\"data-schedule-id\");\n        try {\n            const res = await fetch(\n                \"/api/v1/on-call/who?schedule_id=\" + encodeURIComponent(id),\n                { headers: { Accept: \"application/json\", \"X-Requested-With\": \"uptimepage\" } },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/on_call_schedule.js",
       "line": 81,
       "excerpt": "            let res;\n            try {\n                res = await fetch(form.dataset.action, {\n                    method: form.dataset.method,\n                    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/postmortem_form.js",
       "line": 42,
       "excerpt": "\n  async function send(url, method, body) {\n    const r = await fetch(url, {\n      method: method,\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/js/ui/ribbon_drill.js",
       "line": 67,
       "excerpt": "        const url = `${active.url}?${qs.toString()}`;\n        try {\n            const r = await fetch(url, { headers: { Accept: \"text/html\" } });\n            if (!r.ok) throw new Error(`HTTP ${r.status}`);\n            const html = await r.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 71,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.uptimepage.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Twilio API Key at scripts/seed-marketing.sh:484; …and 82 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 5 issue(s) in the last 6 months: 2.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 18 days (by releases), last release 99 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "27 vulnerabilities were found and none could be placed in `03` §6's table — no CVSS score, or an ecosystem whose manifest we cannot parse for direct-vs-transitive",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "hickory-resolver 0.26.1 — GHSA-6w6g-hm98-mhgm",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.26.2",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6w6g-hm98-mhgm",
       "finding": "hickory-resolver:GHSA-6w6g-hm98-mhgm",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.7.0 — GHSA-33f5-2c5q-wgwj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.2, fixed in 2.0.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-33f5-2c5q-wgwj",
       "finding": "rmcp:GHSA-33f5-2c5q-wgwj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "hickory-resolver 0.26.1 — GHSA-5j98-2g5x-46v6",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.26.2",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5j98-2g5x-46v6",
       "finding": "hickory-resolver:GHSA-5j98-2g5x-46v6",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.14 — RUSTSEC-2026-0185",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.15",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0185",
       "finding": "quinn-proto:RUSTSEC-2026-0185",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.14 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.7.0 — GHSA-9pj6-vhgr-3mwh",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 2.0.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9pj6-vhgr-3mwh",
       "finding": "rmcp:GHSA-9pj6-vhgr-3mwh",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "hickory-resolver 0.26.1 — GHSA-6f2x-v7q7-m7m5",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 6.9, fixed in 0.26.2",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6f2x-v7q7-m7m5",
       "finding": "hickory-resolver:GHSA-6f2x-v7q7-m7m5",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.7.0 — GHSA-9g45-5xwm-f3wc",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 6.8, fixed in 2.1.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9g45-5xwm-f3wc",
       "finding": "rmcp:GHSA-9g45-5xwm-f3wc",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.7.0 — GHSA-c9xm-49cp-xcr9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 6.3, fixed in 2.0.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c9xm-49cp-xcr9",
       "finding": "rmcp:GHSA-c9xm-49cp-xcr9",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rsa 0.9.10 — RUSTSEC-2023-0071",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.9",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2023-0071",
       "finding": "rsa:RUSTSEC-2023-0071",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "cmov 0.5.3 — GHSA-3rjw-m598-pq24",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.5, fixed in 0.5.4",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3rjw-m598-pq24",
       "finding": "cmov:GHSA-3rjw-m598-pq24",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "opentelemetry_sdk 0.31.0 — GHSA-w9wp-h8wv-79jx",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.3, fixed in 0.32.1",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w9wp-h8wv-79jx",
       "finding": "opentelemetry_sdk:GHSA-w9wp-h8wv-79jx",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.40 — RUSTSEC-2026-0285",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.3, fixed in 0.23.45",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0285",
       "finding": "rustls:RUSTSEC-2026-0285",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.40 — RUSTSEC-2026-0346",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 4.0, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0346",
       "finding": "rustls:RUSTSEC-2026-0346",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.40 — RUSTSEC-2026-0348",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0348",
       "finding": "rustls:RUSTSEC-2026-0348",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.40 — RUSTSEC-2026-0349",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0349",
       "finding": "rustls:RUSTSEC-2026-0349",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "ammonia 4.1.4 — RUSTSEC-2021-0157",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 4.1.7",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2021-0157",
       "finding": "ammonia:RUSTSEC-2021-0157",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "ammonia 4.1.4 — RUSTSEC-2021-0158",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 4.1.7",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2021-0158",
       "finding": "ammonia:RUSTSEC-2021-0158",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "backoff 0.4.0 — RUSTSEC-2025-0012",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2025-0012",
       "finding": "backoff:RUSTSEC-2025-0012",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "event-listener 5.4.1 — RUSTSEC-2026-0221",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 5.4.2",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0221",
       "finding": "event-listener:RUSTSEC-2026-0221",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "h2 0.4.14 — RUSTSEC-2026-0258",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.4.16",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0258",
       "finding": "h2:RUSTSEC-2026-0258",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "instant 0.1.13 — RUSTSEC-2024-0384",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2024-0384",
       "finding": "instant:RUSTSEC-2024-0384",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "paste 1.0.15 — RUSTSEC-2024-0436",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2024-0436",
       "finding": "paste:RUSTSEC-2024-0436",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.14 — RUSTSEC-2026-0338",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.11.18",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0338",
       "finding": "quinn-proto:RUSTSEC-2026-0338",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.14 — RUSTSEC-2026-0339",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.11.17",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0339",
       "finding": "quinn-proto:RUSTSEC-2026-0339",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.14 — RUSTSEC-2026-0342",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.11.17",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0342",
       "finding": "quinn-proto:RUSTSEC-2026-0342",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-pemfile 2.2.0 — RUSTSEC-2025-0134",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2025-0134",
       "finding": "rustls-pemfile:RUSTSEC-2025-0134",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 56,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'AGPL-3.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "dev.usetrail/trail",
   "version": "1.29.1",
   "slug": "dev-usetrail-trail",
   "scanned_at": "2026-10-16T02:31:46+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/arsprengel/trail-mcp",
   "package": "npm:usetrail@1.29.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 15,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/hooks-install.js",
       "line": 185,
       "excerpt": "    if (!Array.isArray(groups)) continue\n    const before = groups.length\n    settings.hooks[event] = groups.filter((g) => !(g.hooks ?? []).some((h) => nosso(h.command)))\n    if (settings.hooks[event].length !== before) results.push(t(`${event}: removido`, `${event}: removed`))\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/login.js",
       "line": 27,
       "excerpt": "  out.write(t(`Conectando ao Trail em ${base}\\n`, `Connecting to Trail at ${base}\\n`))\n\n  const startRes = await fetch(base + '/api/auth/device/start', { method: 'POST' })\n  if (!startRes.ok) throw new Error(t(`nao consegui iniciar o login (device/start -> HTTP ${startRes.status})`, `could not start the sign-in (device/start -> HTTP ${startRes.status})`))\n  const d = await startRes.json()",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/login.js",
       "line": 43,
       "excerpt": "  while (Date.now() < deadline) {\n    await sleep(interval)\n    const pr = await fetch(base + '/api/auth/device/poll', {\n      method: 'POST',\n      headers: { 'content-type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (TETHER_API_AUTH, TETHER_API_TOKEN) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "18 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 29 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 29 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "dev.vantagemcp/vantage",
   "version": "1.9.1",
   "slug": "dev-vantagemcp-vantage",
   "scanned_at": "2026-10-16T02:31:48+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/vantagemcp/vantage-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "122e45dd62ca9a283933c95fb7834f54bca17d06",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 9,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/vantage_mcp/store.py",
       "line": 50,
       "excerpt": "    ):\n        if column not in existing:\n            conn.execute(f\"ALTER TABLE api_keys ADD COLUMN {column} {ddl_type}\")\n\n",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/vantage_mcp/store.py",
       "line": 459,
       "excerpt": "        ).fetchone()\n        conn.execute(\"DELETE FROM checks WHERE client_id = ? AND checked_at < ?\", (client_id, cutoff))\n        conn.execute(\n            f\"INSERT INTO checks (client_id, {', '.join(_CHECK_COLS)}) VALUES (?{', ?' * len(_CHECK_COLS)})\",\n            (client_id, domain, keyword, engine, country, language, samples, cited_runs,",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/vantage_mcp/store.py",
       "line": 486,
       "excerpt": "    account page).\"\"\"\n    with closing(_connect()) as conn:\n        rows = conn.execute(\n            f\"SELECT {', '.join(_CHECK_COLS)} FROM checks WHERE client_id = ? ORDER BY checked_at DESC LIMIT ?\",\n            (client_id, limit)).fetchall()",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/vantage_mcp/dataforseo_client.py",
       "line": 89,
       "excerpt": "    )\n    try:\n        with urllib.request.urlopen(req, timeout=timeout) as r:\n            return json.load(r)\n    except urllib.error.HTTPError as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/vantage_mcp/dataforseo_client.py",
       "line": 104,
       "excerpt": "    )\n    try:\n        with urllib.request.urlopen(req, timeout=20) as r:\n            d = json.load(r)\n        return float(d[\"tasks\"][0][\"result\"][0][\"money\"][\"balance\"])",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://vantagemcp.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:42; Secret Keyword at npm/README.md:29",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "10 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 73,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "dev.veritap/locker",
   "version": "0.3.1",
   "slug": "dev-veritap-locker",
   "scanned_at": "2026-10-16T02:31:51+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/veritap-dev/veritap-locker",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "36c6fbbbe52841c76775b880206385896e4f300f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 32,
   "files_pruned": 2,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "2 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "client/index.ts",
       "line": 192,
       "excerpt": "    });\n    if (res.status !== 200) return res;\n    const up = await fetch(res.body.upload_url, {\n      method: \"PUT\",\n      body: bytes as unknown as BodyInit,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "client/index.ts",
       "line": 215,
       "excerpt": "    });\n    if (res.status !== 200 || !res.body.body_url) return null;\n    const blob = await fetch(res.body.body_url);\n    if (!blob.ok) return null;\n    return { bytes: new Uint8Array(await blob.arrayBuffer()), version: res.body.version ?? 0 };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "client/index.ts",
       "line": 249,
       "excerpt": "    if (env.body_b64) return unb64(env.body_b64);\n    if (env.body_url) {\n      const res = await fetch(env.body_url);\n      if (!res.ok) return null;\n      return new Uint8Array(await res.arrayBuffer());",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/smoke-buy-echo.mjs",
       "line": 31,
       "excerpt": "\n// 1. Get the 402 + PaymentRequired (header is authoritative in v2).\nconst r1 = await fetch(url, { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body });\nif (r1.status !== 402) throw new Error(`expected 402, got ${r1.status}`);\nconst paymentRequired = JSON.parse(Buffer.from(r1.headers.get(\"payment-required\"), \"base64\").toString());",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/smoke-buy-echo.mjs",
       "line": 43,
       "excerpt": "\n// 4. Pay.\nconst r2 = await fetch(url, {\n  method: \"POST\",\n  headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/sanctions.ts",
       "line": 31,
       "excerpt": "  const rpc = env.BASE_RPC_URL ?? \"https://mainnet.base.org\";\n  const data = SELECTOR + address.toLowerCase().replace(/^0x/, \"\").padStart(64, \"0\");\n  const res = await fetch(rpc, {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://locker.veritap.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 8 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at .well-known/glimind-verification.txt:1; Secret Keyword at client/index.ts:89; Base64 High Entropy String at src/brand-assets.ts:6; Base64 High Entropy String at src/brand-assets.ts:7; Base64 High Entropy String at src/brand-assets.ts:8; Base64 High Entropy String at src/cli-bundle.ts:2; Secret Keyword at test/unit/stripe.test.ts:14; Secret Keyword at wrangler.toml:47",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "12 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 48 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 46,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "tinypool 1.1.1 — GHSA-5gmw-xhrv-c9v3",
       "detail": "transitive, CVSS 9.5, fixed in 2.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5gmw-xhrv-c9v3",
       "finding": "tinypool:GHSA-5gmw-xhrv-c9v3",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tinypool 1.1.1 — GHSA-85c8-ppgw-ccpr",
       "detail": "transitive, CVSS 9.5, fixed in 2.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-85c8-ppgw-ccpr",
       "finding": "tinypool:GHSA-85c8-ppgw-ccpr",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "wrangler 4.44.0 — GHSA-36p8-mvp6-cv38",
       "detail": "direct, CVSS 7.7, fixed in 4.59.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-36p8-mvp6-cv38",
       "finding": "wrangler:GHSA-36p8-mvp6-cv38",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.33.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.35.2 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.33.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.35.2 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-gcfj-64vw-6mp9",
       "detail": "transitive, CVSS 8.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gcfj-64vw-6mp9",
       "finding": "axios:GHSA-gcfj-64vw-6mp9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-x97p-jq2g-jp4f",
       "detail": "transitive, CVSS 8.3, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x97p-jq2g-jp4f",
       "finding": "axios:GHSA-x97p-jq2g-jp4f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-542g-h47m-68v8",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-542g-h47m-68v8",
       "finding": "axios:GHSA-542g-h47m-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-mghh-pgcx-3jjj",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mghh-pgcx-3jjj",
       "finding": "axios:GHSA-mghh-pgcx-3jjj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-mcm9-63f2-9j32",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mcm9-63f2-9j32",
       "finding": "devalue:GHSA-mcm9-63f2-9j32",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-r9w8-h9r3-54w4",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r9w8-h9r3-54w4",
       "finding": "devalue:GHSA-r9w8-h9r3-54w4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-x5rw-q4pp-hg5g",
       "detail": "transitive, CVSS 8.2, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5rw-q4pp-hg5g",
       "finding": "devalue:GHSA-x5rw-q4pp-hg5g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-m8m8-qj5v-23w3",
       "detail": "transitive, CVSS 7.6, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m8m8-qj5v-23w3",
       "finding": "axios:GHSA-m8m8-qj5v-23w3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/client 2.0.0 — GHSA-6qxp-vccf-f47h",
       "detail": "transitive, CVSS 7.5, fixed in 2.2.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/client:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.30.0 — GHSA-6qxp-vccf-f47h",
       "detail": "transitive, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "devalue 5.9.0 — GHSA-j22f-vq7h-c4qm",
       "detail": "transitive, CVSS 7.5, fixed in 5.9.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j22f-vq7h-c4qm",
       "finding": "devalue:GHSA-j22f-vq7h-c4qm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-5jgf-p345-68v8",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5jgf-p345-68v8",
       "finding": "fast-uri:GHSA-5jgf-p345-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.14.0 — GHSA-f269-vfmq-vjvj",
       "detail": "transitive, CVSS 7.5, fixed in 7.24.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f269-vfmq-vjvj",
       "finding": "undici:GHSA-f269-vfmq-vjvj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.14.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "transitive, CVSS 7.5, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "transitive, CVSS 7.5, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.14.0 — GHSA-v9p9-hfj2-hcw8",
       "detail": "transitive, CVSS 7.5, fixed in 7.24.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v9p9-hfj2-hcw8",
       "finding": "undici:GHSA-v9p9-hfj2-hcw8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.14.0 — GHSA-vrm6-8vpv-qv8q",
       "detail": "transitive, CVSS 7.5, fixed in 7.24.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vrm6-8vpv-qv8q",
       "finding": "undici:GHSA-vrm6-8vpv-qv8q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.14.0 — GHSA-vxpw-j846-p89q",
       "detail": "transitive, CVSS 7.5, fixed in 7.28.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vxpw-j846-p89q",
       "finding": "undici:GHSA-vxpw-j846-p89q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 8.3.2 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 9.0.1 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.18.0 — GHSA-96hv-2xvq-fx4p",
       "detail": "transitive, CVSS 7.5, fixed in 8.21.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.14.0 — GHSA-4cwx-7wf7-3272",
       "detail": "transitive, CVSS 7.4, fixed in 7.29.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4cwx-7wf7-3272",
       "finding": "undici:GHSA-4cwx-7wf7-3272",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-w293-vg96-wgc3",
       "detail": "transitive, CVSS 7.4, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w293-vg96-wgc3",
       "finding": "undici:GHSA-w293-vg96-wgc3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-3pq3-5fj3-cg6v",
       "detail": "transitive, CVSS 7.0, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3pq3-5fj3-cg6v",
       "finding": "axios:GHSA-3pq3-5fj3-cg6v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.33.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "transitive, CVSS 7.0, fixed in 0.35.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.13.2 — GHSA-gqvv-2mrq-wpjv",
       "detail": "direct, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.13.2 — GHSA-crvj-82cr-hjcx",
       "detail": "direct, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 3.2.7 — GHSA-82fw-gwwq-j7x9",
       "detail": "direct, CVSS 5.9, fixed in 4.1.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "vitest:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.13.2 — GHSA-g6gw-c38x-mqfc",
       "detail": "direct, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.13.2 — GHSA-hxh3-vqpv-xpqv",
       "detail": "direct, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-44g4-m2mj-wpvx",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-44g4-m2mj-wpvx",
       "finding": "axios:GHSA-44g4-m2mj-wpvx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-4hqw-qxg8-jxx2",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4hqw-qxg8-jxx2",
       "finding": "axios:GHSA-4hqw-qxg8-jxx2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-9fr6-4gfg-395g",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9fr6-4gfg-395g",
       "finding": "axios:GHSA-9fr6-4gfg-395g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-f4gw-2p7v-4548",
       "detail": "transitive, CVSS 6.9, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f4gw-2p7v-4548",
       "finding": "axios:GHSA-f4gw-2p7v-4548",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-hcpx-6fm6-wx23",
       "detail": "transitive, CVSS 6.9, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hcpx-6fm6-wx23",
       "finding": "axios:GHSA-hcpx-6fm6-wx23",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-j8rh-479h-cp32",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j8rh-479h-cp32",
       "finding": "axios:GHSA-j8rh-479h-cp32",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.16.0 — GHSA-vh66-26gq-q6x8",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vh66-26gq-q6x8",
       "finding": "axios:GHSA-vh66-26gq-q6x8",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "email.templated/mcp",
   "version": "0.1.1",
   "slug": "email-templated-mcp",
   "scanned_at": "2026-10-16T02:32:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "npm:@templatedemails/mcp@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (7 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://app.templated.email/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:26",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "guide.bicycle/guide-registry",
   "version": "1.0.0",
   "slug": "guide-bicycle-guide-registry",
   "scanned_at": "2026-10-16T02:32:02+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/people-analyst/bicycle-guide",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://bicycle.guide/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/people-analyst/bicycle-guide) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.alterlab/mcp-server",
   "version": "1.8.0",
   "slug": "io-alterlab-mcp-server",
   "scanned_at": "2026-10-16T02:32:02+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/RapierCraft/alterlab-mcp-server",
   "package": "npm:alterlab-mcp-server@1.8.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "b1d68b83a0c24eaef63c9880b189dae69c0a1521",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 20,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository at version 1.8.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 118,
       "excerpt": "    };\n\n    const response = await fetch(url, {\n      method,\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 340,
       "excerpt": "      : `${this.apiUrl}${screenshotUrl}`;\n\n    const response = await fetch(fullUrl, {\n      headers: {\n        \"X-API-Key\": this.apiKey,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:92; Secret Keyword at dist/auth.js:370; Secret Keyword at dist/config.js:62; Secret Keyword at dist/index.js:102",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "24 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 80 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 0 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 9 days (by releases), last release 100 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.1powergrey/sios-gano-connector",
   "version": "1.5.0",
   "slug": "io-github-1powergrey-sios-gano-connector",
   "scanned_at": "2026-10-16T02:32:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/1powergrey/sios-gano-connector",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://sios-gano-connector.vercel.app/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/1powergrey/sios-gano-connector) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.1shizaan/debugai-mcp",
   "version": "2.7.0",
   "slug": "io-github-1shizaan-debugai-mcp",
   "scanned_at": "2026-10-16T02:32:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/1shizaan/debugai-mcp",
   "package": "npm:@debugai/mcp@2.7.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "9eacdf54a2bf7cc40200fd901a871328f5f27116",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 17,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Basic Auth Credentials, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at dist/config.js:4; Secret Keyword at dist/index.js:63; Basic Auth Credentials at dist/workspaceFacts.d.ts:253; Basic Auth Credentials at dist/workspaceFacts.js:654",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 81 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ABWerks/pequod-mcp",
   "version": "0.2.2",
   "slug": "io-github-abwerks-pequod-mcp",
   "scanned_at": "2026-10-16T02:32:11+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ABWerks/pequod-mcp",
   "package": "pypi:pequod-mcp@0.2.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (OPENFIGI_API_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "5 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 62 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by tags), last release 62 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.API-Disk-Integrations/agent-mandate",
   "version": "0.1.1",
   "slug": "io-github-api-disk-integrations-agent-mandate",
   "scanned_at": "2026-10-16T02:32:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/API-Disk-Integrations/agent-mandate-mcp",
   "package": "npm:@api-disk-integrations/agent-mandate-mcp@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "2439302b7d18d4f2585d0c21814e9d1c9f635153",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 0.1.1, because the published package carries its code only as build output, which is not read as the server's own source; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 30 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 30 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 66,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Alepha188838884/context-firewall",
   "version": "0.1.1",
   "slug": "io-github-alepha188838884-context-firewall",
   "scanned_at": "2026-10-16T02:32:17+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Alepha188838884/context-firewall",
   "package": "npm:context-firewall@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "5c0f3fcf399c41ac5613df5cf8ee2dfcd7ad667e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 25,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/pipeline/json-summary.ts",
       "line": 106,
       "excerpt": "      const result: { [key: string]: Json } = {};\n      for (const key of keys.slice(0, OBJECT_KEEP_COUNT)) {\n        result[key] = summarize(value[key] as Json, depth + 1, fullHandle);\n      }\n      const remaining = keys.length - OBJECT_KEEP_COUNT;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/pipeline/llm-summary.ts",
       "line": 46,
       "excerpt": "\n      try {\n        const res = await fetch(url, {\n          method: 'POST',\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 43 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (2 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 6 days (by releases), last release 43 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.AliAkhtari78/spotifyscraper",
   "version": "3.9.2",
   "slug": "io-github-aliakhtari78-spotifyscraper",
   "scanned_at": "2026-10-16T02:32:21+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/AliAkhtari78/SpotifyScraper",
   "package": "pypi:spotifyscraper@3.9.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 63,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 124 credential-shaped string(s), every one from a keyword or entropy heuristic (Basic Auth Credentials, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Basic Auth Credentials at docs/guides/async.md:129; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:42; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:47; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:52; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:57; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:67; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:72; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:77; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:82; Hex High Entropy String at src/spotify_scraper/api/pathfinder.py:87; …and 114 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "28 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 56,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 112 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 3 issue(s) in the last 6 months: 43.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 112 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 22,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "anyio 4.14.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.28.0 — PYSEC-2026-3483",
       "detail": "direct, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.28.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4177",
       "detail": "transitive, CVSS 8.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4177",
       "finding": "urllib3:PYSEC-2026-4177",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 49.0.0 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.5.1 — PYSEC-2026-4013",
       "detail": "transitive, CVSS 7.8, fixed in 21.7.13",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4013",
       "finding": "virtualenv:PYSEC-2026-4013",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.5.1 — PYSEC-2026-4011",
       "detail": "transitive, CVSS 7.7, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4011",
       "finding": "virtualenv:PYSEC-2026-4011",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4175",
       "detail": "transitive, CVSS 7.6, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4175",
       "finding": "urllib3:PYSEC-2026-4175",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pymdown-extensions 10.21.3 — PYSEC-2026-3654",
       "detail": "transitive, CVSS 7.5, fixed in 11.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3654",
       "finding": "pymdown-extensions:PYSEC-2026-3654",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4143",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4143",
       "finding": "pyjwt:PYSEC-2026-4143",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4150",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4150",
       "finding": "pyjwt:PYSEC-2026-4150",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4151",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4151",
       "finding": "pyjwt:PYSEC-2026-4151",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.5.1 — PYSEC-2026-4014",
       "detail": "transitive, CVSS 7.3, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4014",
       "finding": "virtualenv:PYSEC-2026-4014",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.14.0 — PYSEC-2026-4023",
       "detail": "transitive, CVSS 7.0, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4023",
       "finding": "anyio:PYSEC-2026-4023",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4176",
       "detail": "transitive, CVSS 6.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4176",
       "finding": "urllib3:PYSEC-2026-4176",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.14.0 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.5.1 — PYSEC-2026-4012",
       "detail": "transitive, CVSS 5.8, fixed in 21.7.11",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4012",
       "finding": "virtualenv:PYSEC-2026-4012",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mkdocs-material 9.7.6 — PYSEC-2026-3864",
       "detail": "transitive, CVSS 5.4, fixed in 9.7.7",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3864",
       "finding": "mkdocs-material:PYSEC-2026-3864",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4142",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4142",
       "finding": "pyjwt:PYSEC-2026-4142",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pymdown-extensions 10.21.3 — PYSEC-2026-3609",
       "detail": "transitive, CVSS 5.3, fixed in 11.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3609",
       "finding": "pymdown-extensions:PYSEC-2026-3609",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.AncientiCe/palace-rs",
   "version": "0.17.0",
   "slug": "io-github-ancientice-palace-rs",
   "scanned_at": "2026-10-16T02:32:26+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/AncientiCe/palace-rs",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "c4774e7ef0c8f723ba29ff7bd59e28a3b4296a24",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (PALACE_API_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 95,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 4 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 4 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "8 vulnerabilities were found and none could be placed in `03` §6's table — no CVSS score, or an ecosystem whose manifest we cannot parse for direct-vs-transitive",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "openssl 0.10.76 — GHSA-xp3w-r5p5-63rr",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.10.79",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xp3w-r5p5-63rr",
       "finding": "openssl:GHSA-xp3w-r5p5-63rr",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.76 — GHSA-hppc-g8h3-xhp3",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.3, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hppc-g8h3-xhp3",
       "finding": "openssl:GHSA-hppc-g8h3-xhp3",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.76 — GHSA-ghm9-cr32-g9qj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.1, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ghm9-cr32-g9qj",
       "finding": "openssl:GHSA-ghm9-cr32-g9qj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.76 — GHSA-8c75-8mhr-p7r9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8c75-8mhr-p7r9",
       "finding": "openssl:GHSA-8c75-8mhr-p7r9",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.76 — GHSA-pqf5-4pqq-29f5",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pqf5-4pqq-29f5",
       "finding": "openssl:GHSA-pqf5-4pqq-29f5",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.76 — GHSA-phqj-4mhp-q6mq",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.1, fixed in 0.10.80",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-phqj-4mhp-q6mq",
       "finding": "openssl:GHSA-phqj-4mhp-q6mq",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.76 — GHSA-xv59-967r-8726",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.1, fixed in 0.10.79",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xv59-967r-8726",
       "finding": "openssl:GHSA-xv59-967r-8726",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.76 — GHSA-xmgf-hq76-4vx2",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 1.7, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xmgf-hq76-4vx2",
       "finding": "openssl:GHSA-xmgf-hq76-4vx2",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.AnkitPat/todo-mcp",
   "version": "1.0.0",
   "slug": "io-github-ankitpat-todo-mcp",
   "scanned_at": "2026-10-16T02:32:30+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/AnkitPat/todo-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://343e-2405-201-303a-4980-a1c1-6538-33c0-a7d8.ngrok-free.app/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/AnkitPat/todo-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.AnnasMazhar/pyspark-mcp",
   "version": "0.0.4",
   "slug": "io-github-annasmazhar-pyspark-mcp",
   "scanned_at": "2026-10-16T02:32:31+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/AnnasMazhar/pyspark_mcp",
   "package": "pypi:pyspark-tools@0.0.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 11,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "pyspark_tools/memory_manager.py",
       "line": 267,
       "excerpt": "        for column, column_type in required_columns.items():\n            if column not in columns:\n                conn.execute(\n                    f\"ALTER TABLE conversions ADD COLUMN {column} {column_type}\"\n                )",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "51 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 48 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.AutomateLab-tech/citation-intelligence",
   "version": "0.12.1",
   "slug": "io-github-automatelab-tech-citation-intelligence",
   "scanned_at": "2026-10-16T02:32:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/AutomateLab-tech/citation-intelligence",
   "package": "npm:@automatelab/citation-intelligence@0.12.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "8247bd60df768474f066f11961f937b53a9a6868",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 50,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "scored on the declared repository at version 0.12.1, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/resources.ts",
       "line": 145,
       "excerpt": "      try {\n        const files = await readdir(join(snapshotDir, p));\n        snapshotsByPanel[p] = files.filter((f) => f.endsWith(\".json\")).length;\n      } catch {\n        // skip",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/fetch.ts",
       "line": 127,
       "excerpt": "    const timer = setTimeout(() => ac.abort(), timeoutMs);\n    try {\n      const res = await request(url, {\n        method,\n        headers: { \"user-agent\": \"citation-intelligence-mcp/0.5\", ...headers },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/fetch.ts",
       "line": 175,
       "excerpt": "    const timer = setTimeout(() => ac.abort(), timeoutMs);\n    try {\n      const res = await request(url, {\n        method,\n        headers: { \"user-agent\": \"citation-intelligence-mcp/0.5\", ...headers },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:174; Secret Keyword at README.md:176; Secret Keyword at README.md:177; Secret Keyword at smithery.yaml:37",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 81,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 12.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 3 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Botagram/trust-gate",
   "version": "1.0.1",
   "slug": "io-github-botagram-trust-gate",
   "scanned_at": "2026-10-16T02:32:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Arbogram/brand-capsule-spec",
   "package": "npm:@registeredbrands/trust-gate-mcp@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (RB_API_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.CSOAI-ORG/canada-aida-ai-mcp",
   "version": "1.0.15",
   "slug": "io-github-csoai-org-canada-aida-ai-mcp",
   "scanned_at": "2026-10-16T02:32:40+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/CSOAI-ORG/canada-aida-ai-mcp",
   "package": "pypi:canada-aida-ai-mcp@1.0.15",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "auth_middleware.py",
       "line": 26,
       "excerpt": "        req = urllib.request.Request(_VERIFY_URL, data=data,\n                                     headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with urllib.request.urlopen(req, timeout=_TIMEOUT) as r:\n            d = json.load(r)\n            return bool(d.get(\"allowed\", True)), d.get(\"tier\", \"free\"), d.get(\"remaining\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "server.py",
       "line": 306,
       "excerpt": "        req = _meter_urlreq.Request(_METER_URL, data=data,\n            headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with _meter_urlreq.urlopen(req, timeout=2.5) as r:\n            d = json.loads(r.read())\n            if isinstance(d, dict) and \"allowed\" in d:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at smithery.yaml:130",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "5 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 42 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (7 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 39 days (by releases), last release 123 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 65,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.CSOAI-ORG/fsa-food-safety-mcp",
   "version": "1.0.11",
   "slug": "io-github-csoai-org-fsa-food-safety-mcp",
   "scanned_at": "2026-10-16T02:32:43+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/CSOAI-ORG/fsa-food-safety-mcp",
   "package": "pypi:fsa-food-safety-mcp@1.0.14",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "server.py",
       "line": 81,
       "excerpt": "        req = _meter_urlreq.Request(_METER_URL, data=data,\n            headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with _meter_urlreq.urlopen(req, timeout=2.5) as r:\n            d = json.loads(r.read())\n            if isinstance(d, dict) and \"allowed\" in d:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (MEOK_API_KEY, MEOK_PAYG_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "7 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 122 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 18,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "fsa_food_safety_mcp-1.0.14.dist-info/licenses/LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.CSOAI-ORG/meok-bft-governance-mcp",
   "version": "1.0.8",
   "slug": "io-github-csoai-org-meok-bft-governance-mcp",
   "scanned_at": "2026-10-16T02:32:45+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "pypi:meok-bft-governance-mcp@1.0.7",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "server.py",
       "line": 64,
       "excerpt": "        req = _meter_urlreq.Request(_METER_URL, data=data,\n            headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with _meter_urlreq.urlopen(req, timeout=2.5) as r:\n            d = json.loads(r.read())\n            if isinstance(d, dict) and \"allowed\" in d:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (MEOK_PAYG_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "3 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 65,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.CSOAI-ORG/meok-bs7121-mcp",
   "version": "1.0.5",
   "slug": "io-github-csoai-org-meok-bs7121-mcp",
   "scanned_at": "2026-10-16T02:32:48+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/CSOAI-ORG/meok-bs7121-mcp",
   "package": "pypi:meok-bs7121-mcp@1.0.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "server.py",
       "line": 168,
       "excerpt": "        req = _meter_urlreq.Request(_METER_URL, data=data,\n            headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with _meter_urlreq.urlopen(req, timeout=2.5) as r:\n            d = json.loads(r.read())\n            if isinstance(d, dict) and \"allowed\" in d:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (MEOK_HMAC_SECRET, MEOK_PAYG_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "10 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 122 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.CSOAI-ORG/meok-enterprise-compliance-checker",
   "version": "1.0.8",
   "slug": "io-github-csoai-org-meok-enterprise-compliance-checker",
   "scanned_at": "2026-10-16T02:32:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "pypi:meok-enterprise-compliance-checker@1.0.7",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "server.py",
       "line": 226,
       "excerpt": "        req = _meter_urlreq.Request(_METER_URL, data=data,\n            headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with _meter_urlreq.urlopen(req, timeout=2.5) as r:\n            d = json.loads(r.read())\n            if isinstance(d, dict) and \"allowed\" in d:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (MEOK_PAYG_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 68,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.CSOAI-ORG/resume-parser-ai-mcp",
   "version": "1.0.8",
   "slug": "io-github-csoai-org-resume-parser-ai-mcp",
   "scanned_at": "2026-10-16T02:32:52+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/CSOAI-ORG/resume-parser-ai-mcp",
   "package": "pypi:resume-parser-ai-mcp@1.0.8",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "server.py",
       "line": 74,
       "excerpt": "        req = _meter_urlreq.Request(_METER_URL, data=data,\n            headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with _meter_urlreq.urlopen(req, timeout=2.5) as r:\n            d = json.loads(r.read())\n            if isinstance(d, dict) and \"allowed\" in d:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at smithery.yaml:47",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "5 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 42 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 20 days (by releases), last release 123 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 59,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.CSOAI-ORG/scam-detector-mcp",
   "version": "1.0.12",
   "slug": "io-github-csoai-org-scam-detector-mcp",
   "scanned_at": "2026-10-16T02:32:54+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/CSOAI-ORG/scam-detector-mcp",
   "package": "pypi:scam-detector-mcp@1.0.12",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "auth_middleware.py",
       "line": 26,
       "excerpt": "        req = urllib.request.Request(_VERIFY_URL, data=data,\n                                     headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with urllib.request.urlopen(req, timeout=_TIMEOUT) as r:\n            d = json.load(r)\n            return bool(d.get(\"allowed\", True)), d.get(\"tier\", \"free\"), d.get(\"remaining\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "server.py",
       "line": 323,
       "excerpt": "        req = _meter_urlreq.Request(_METER_URL, data=data,\n            headers={\"Content-Type\": \"application/json\"}, method=\"POST\")\n        with _meter_urlreq.urlopen(req, timeout=2.5) as r:\n            d = json.loads(r.read())\n            if isinstance(d, dict) and \"allowed\" in d:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (MEOK_API_KEY, MEOK_ATTEST_KEY, MEOK_PAYG_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "5 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 42 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 59,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.CSOAI-ORG/supply-chain-mcp",
   "version": "1.0.9",
   "slug": "io-github-csoai-org-supply-chain-mcp",
   "scanned_at": "2026-10-16T02:32:57+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/CSOAI-ORG/supply-chain-mcp",
   "package": "pypi:supply-chain-mcp@1.0.9",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (MEOK_API_KEY, MEOK_PAYG_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "6 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 42 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 65,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Cifero74/mcp-apple-music",
   "version": "1.1.0",
   "slug": "io-github-cifero74-mcp-apple-music",
   "scanned_at": "2026-10-16T02:32:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Cifero74/mcp-apple-music",
   "package": "pypi:mcp-apple-music-server@1.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (APPLE_KEY_ID, APPLE_MUSIC_USER_TOKEN, APPLE_PRIVATE_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "11 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 54,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 7 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 3 issue(s) in the last 6 months: 100.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4145",
       "detail": "direct, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-3553",
       "detail": "direct, CVSS 8.7, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-3552",
       "detail": "direct, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4183",
       "detail": "direct, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3481",
       "detail": "direct, CVSS 7.6, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3481",
       "finding": "mcp:PYSEC-2026-3481",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3483",
       "detail": "direct, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — GHSA-537c-gmf6-5ccf",
       "detail": "direct, CVSS 7.5, fixed in 48.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-537c-gmf6-5ccf",
       "finding": "cryptography:GHSA-537c-gmf6-5ccf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-120",
       "detail": "direct, CVSS 7.5, fixed in 2.12.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-120",
       "finding": "pyjwt:PYSEC-2026-120",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-179",
       "detail": "direct, CVSS 7.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-179",
       "finding": "pyjwt:PYSEC-2026-179",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4144",
       "detail": "direct, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4149",
       "detail": "direct, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3482",
       "detail": "direct, CVSS 7.1, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3482",
       "finding": "mcp:PYSEC-2026-3482",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3036",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3036",
       "finding": "python-multipart:PYSEC-2026-3036",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3039",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.27",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3039",
       "finding": "python-multipart:PYSEC-2026-3039",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.52.1 — PYSEC-2026-2281",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2281",
       "finding": "starlette:PYSEC-2026-2281",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.52.1 — PYSEC-2026-249",
       "detail": "transitive, CVSS 7.5, fixed in 1.3.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-249",
       "finding": "starlette:PYSEC-2026-249",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-3554",
       "detail": "direct, CVSS 6.9, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3554",
       "finding": "cryptography:PYSEC-2026-3554",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4146",
       "detail": "direct, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4152",
       "detail": "direct, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-176",
       "detail": "direct, CVSS 5.4, fixed in 2.12.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-176",
       "finding": "pyjwt:PYSEC-2026-176",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-35",
       "detail": "direct, CVSS 5.3, fixed in 46.0.6",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-35",
       "finding": "cryptography:PYSEC-2026-35",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-178",
       "detail": "direct, CVSS 5.3, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-178",
       "finding": "pyjwt:PYSEC-2026-178",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4140",
       "detail": "direct, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4141",
       "detail": "direct, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4147",
       "detail": "direct, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4148",
       "detail": "direct, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-175",
       "detail": "direct, CVSS 4.2, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-175",
       "finding": "pyjwt:PYSEC-2026-175",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "idna 3.11 — PYSEC-2026-215",
       "detail": "transitive, CVSS 6.9, fixed in 3.15",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-215",
       "finding": "idna:PYSEC-2026-215",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-dotenv 1.2.1 — PYSEC-2026-2270",
       "detail": "transitive, CVSS 6.6, fixed in 1.2.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2270",
       "finding": "python-dotenv:PYSEC-2026-2270",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.52.1 — PYSEC-2026-161",
       "detail": "transitive, CVSS 6.5, fixed in 1.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-161",
       "finding": "starlette:PYSEC-2026-161",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pydantic-settings 2.13.1 — GHSA-4xgf-cpjx-pc3j",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xgf-cpjx-pc3j",
       "finding": "pydantic-settings:GHSA-4xgf-cpjx-pc3j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3038",
       "detail": "transitive, CVSS 5.3, fixed in 0.0.26",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3038",
       "finding": "python-multipart:PYSEC-2026-3038",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.52.1 — PYSEC-2026-2280",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2280",
       "finding": "starlette:PYSEC-2026-2280",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.52.1 — PYSEC-2026-248",
       "detail": "transitive, CVSS 5.3, fixed in 1.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-248",
       "finding": "starlette:PYSEC-2026-248",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-177",
       "detail": "direct, CVSS 3.7, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-177",
       "finding": "pyjwt:PYSEC-2026-177",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3037",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3037",
       "finding": "python-multipart:PYSEC-2026-3037",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3040",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.31",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3040",
       "finding": "python-multipart:PYSEC-2026-3040",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3041",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3041",
       "finding": "python-multipart:PYSEC-2026-3041",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pygments 2.19.2 — PYSEC-2026-2987",
       "detail": "transitive, CVSS 3.3, fixed in 2.20.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2987",
       "finding": "pygments:PYSEC-2026-2987",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Cipher208/ariel-memory",
   "version": "1.0.0",
   "slug": "io-github-cipher208-ariel-memory",
   "scanned_at": "2026-10-16T02:33:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Cipher208/mcp-ariel-memory",
   "package": "npm:mcp-ariel-memory@1.0.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 22,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "bin.js",
       "line": 13,
       "excerpt": "  for (const cmd of candidates) {\n    try {\n      const out = execSync(`\"${cmd}\" --version 2>&1`, { encoding: 'utf8', shell: true });\n      const match = out.match(/Python (\\d+\\.\\d+)/);\n      if (match) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "bin.js",
       "line": 13,
       "excerpt": "  for (const cmd of candidates) {\n    try {\n      const out = execSync(`\"${cmd}\" --version 2>&1`, { encoding: 'utf8', shell: true });\n      const match = out.match(/Python (\\d+\\.\\d+)/);\n      if (match) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "bin.js",
       "line": 18,
       "excerpt": "        const version = parseFloat(match[1]);\n        if (version >= 3.10) {\n          const pathOut = execSync(`\"${cmd}\" -c \"import sys; print(sys.executable)\" 2>&1`, { encoding: 'utf8', shell: true });\n          if (pathOut.includes('hermes') || pathOut.includes('venv') || pathOut.includes('.local') || pathOut.includes('conda')) {\n            continue;",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "bin.js",
       "line": 18,
       "excerpt": "        const version = parseFloat(match[1]);\n        if (version >= 3.10) {\n          const pathOut = execSync(`\"${cmd}\" -c \"import sys; print(sys.executable)\" 2>&1`, { encoding: 'utf8', shell: true });\n          if (pathOut.includes('hermes') || pathOut.includes('venv') || pathOut.includes('.local') || pathOut.includes('conda')) {\n            continue;",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "bin.js",
       "line": 38,
       "excerpt": "    if (!p) continue;\n    try {\n      const out = execSync(`\"${p}\" --version 2>&1`, { encoding: 'utf8' });\n      if (out.includes('Python 3.')) {\n        return `\"${p}\"`;",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "bin.js",
       "line": 38,
       "excerpt": "    if (!p) continue;\n    try {\n      const out = execSync(`\"${p}\" --version 2>&1`, { encoding: 'utf8' });\n      if (out.includes('Python 3.')) {\n        return `\"${p}\"`;",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "install.js",
       "line": 22,
       "excerpt": "  for (const cmd of candidates) {\n    try {\n      const out = execSync(`\"${cmd}\" --version 2>&1`, { encoding: 'utf8', shell: true });\n      const match = out.match(/Python (\\d+\\.\\d+)/);\n      if (match) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "install.js",
       "line": 22,
       "excerpt": "  for (const cmd of candidates) {\n    try {\n      const out = execSync(`\"${cmd}\" --version 2>&1`, { encoding: 'utf8', shell: true });\n      const match = out.match(/Python (\\d+\\.\\d+)/);\n      if (match) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "install.js",
       "line": 28,
       "excerpt": "        if (version >= 3.10) {\n          // Check if it's a venv\n          const pathOut = execSync(`\"${cmd}\" -c \"import sys; print(sys.executable)\" 2>&1`, { encoding: 'utf8', shell: true });\n          if (pathOut.includes('hermes') || pathOut.includes('venv') || pathOut.includes('.local') || pathOut.includes('conda')) {\n            continue;",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "install.js",
       "line": 28,
       "excerpt": "        if (version >= 3.10) {\n          // Check if it's a venv\n          const pathOut = execSync(`\"${cmd}\" -c \"import sys; print(sys.executable)\" 2>&1`, { encoding: 'utf8', shell: true });\n          if (pathOut.includes('hermes') || pathOut.includes('venv') || pathOut.includes('.local') || pathOut.includes('conda')) {\n            continue;",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "install.js",
       "line": 50,
       "excerpt": "    if (!p) continue;\n    try {\n      const out = execSync(`\"${p}\" --version 2>&1`, { encoding: 'utf8' });\n      if (out.includes('Python 3.')) {\n        return `\"${p}\"`;",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "install.js",
       "line": 50,
       "excerpt": "    if (!p) continue;\n    try {\n      const out = execSync(`\"${p}\" --version 2>&1`, { encoding: 'utf8' });\n      if (out.includes('Python 3.')) {\n        return `\"${p}\"`;",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "install.js",
       "line": 62,
       "excerpt": "function isInstalled(python) {\n  try {\n    const out = execSync(`${python} -m pip show ${PACKAGE_NAME}`, { encoding: 'utf8' });\n    const versionMatch = out.match(/Version:\\s*(.+)/);\n    if (versionMatch) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "install.js",
       "line": 62,
       "excerpt": "function isInstalled(python) {\n  try {\n    const out = execSync(`${python} -m pip show ${PACKAGE_NAME}`, { encoding: 'utf8' });\n    const versionMatch = out.match(/Version:\\s*(.+)/);\n    if (versionMatch) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "install.js",
       "line": 77,
       "excerpt": "  try {\n    // Try PyPI first\n    execSync(`${python} -m pip install --user \"${PACKAGE_NAME}>=${MIN_VERSION}\" 2>&1`, {\n      stdio: 'inherit',\n    });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "install.js",
       "line": 77,
       "excerpt": "  try {\n    // Try PyPI first\n    execSync(`${python} -m pip install --user \"${PACKAGE_NAME}>=${MIN_VERSION}\" 2>&1`, {\n      stdio: 'inherit',\n    });",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "install.js",
       "line": 85,
       "excerpt": "    console.log(`[mcp-ariel-memory] PyPI install failed, installing from GitHub...`);\n    try {\n      execSync(`${python} -m pip install --user \"git+https://github.com/Cipher208/mcp-ariel-memory.git@master\"`, {\n        stdio: 'inherit',\n      });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "install.js",
       "line": 85,
       "excerpt": "    console.log(`[mcp-ariel-memory] PyPI install failed, installing from GitHub...`);\n    try {\n      execSync(`${python} -m pip install --user \"git+https://github.com/Cipher208/mcp-ariel-memory.git@master\"`, {\n        stdio: 'inherit',\n      });",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 1.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 3 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.DarthSander/agentdata-nl",
   "version": "0.4.0",
   "slug": "io-github-darthsander-agentdata-nl",
   "scanned_at": "2026-10-16T02:33:05+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/DarthSander/data_agent",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agentdata-api.sander-van-aard.workers.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/DarthSander/data_agent) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.DataLeadsPRO/website-change-monitor",
   "version": "1.0.1",
   "slug": "io-github-dataleadspro-website-change-monitor",
   "scanned_at": "2026-10-16T02:33:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/DataLeadsPRO/website-change-monitor",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "5390f4a2c20d5a4a045c4df8680833d62e2f8fac",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "mcp_server.py",
       "line": 12,
       "excerpt": "    body = {'clientKey': KEY}\n    body.update(payload or {})\n    r = httpx.post(BASE + path, json=body, headers={'Authorization': 'Bearer ' + KEY}, timeout=120)\n    r.raise_for_status()\n    return r.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://data.dataleads.pro/mcp/website-change-monitor; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:22",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 29 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 29 day(s) ago (by tags), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source: requirements.txt does not pin every requirement to one exact version, so dependency versions are unresolved and no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.DekryptLabs/dlbrowser",
   "version": "4.0.2",
   "slug": "io-github-dekryptlabs-dlbrowser",
   "scanned_at": "2026-10-16T02:33:09+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/DekryptLabs/dlbrowser",
   "package": "pypi:dlbrowser@4.0.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 78,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 85,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/__main__.py",
       "line": 108,
       "excerpt": "        try:\n            req = urllib.request.Request(url, method=\"GET\")\n            with urllib.request.urlopen(req, timeout=2) as resp:\n                if resp.status == 200:\n                    print(f\"DLBrowser gateway started (PID {proc.pid})\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/cli.py",
       "line": 541,
       "excerpt": "    try:\n        req = urllib.request.Request(url, headers={\"Accept\": \"application/vnd.github.v3+json\", \"User-Agent\": \"dlbrowser-cli\"})\n        with urllib.request.urlopen(req, timeout=15) as resp:\n            data = json_lib.loads(resp.read().decode(\"utf-8\"))\n    except Exception as exc:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/cli.py",
       "line": 603,
       "excerpt": "        url = f\"https://api.github.com/repos/{GITHUB_REPO}/releases/latest\"\n        req = urllib.request.Request(url, headers={\"Accept\": \"application/vnd.github.v3+json\", \"User-Agent\": \"dlbrowser-cli\"})\n        with urllib.request.urlopen(req, timeout=10) as resp:\n            data = json_lib.loads(resp.read().decode(\"utf-8\"))\n        latest_tag = data.get(\"tag_name\", \"\").lstrip(\"v\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/deep_crawl.py",
       "line": 123,
       "excerpt": "        try:\n            import urllib.request\n            resp = urllib.request.urlopen(url, timeout=15)\n            content = resp.read().decode(\"utf-8\", errors=\"ignore\")\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/hermes_ds_fallback.py",
       "line": 80,
       "excerpt": "        )\n\n        resp = urllib.request.urlopen(req, timeout=timeout)\n        data = json.loads(resp.read().decode(\"utf-8\"))\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/hermes_ds_fallback.py",
       "line": 138,
       "excerpt": "            headers={\"Authorization\": f\"Bearer {api_key}\"},\n        )\n        resp = urllib.request.urlopen(req, timeout=10)\n        return json.loads(resp.read().decode(\"utf-8\"))\n    except Exception as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/llm_manager.py",
       "line": 309,
       "excerpt": "        loop = asyncio.get_event_loop()\n        resp = await asyncio.wait_for(\n            loop.run_in_executor(None, lambda: urllib.request.urlopen(req, timeout=120)),\n            timeout=130,\n        )",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/mcp_server.py",
       "line": 695,
       "excerpt": "                headers={\"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)\"}\n            )\n            resp = urllib.request.urlopen(req, timeout=15)\n            html = resp.read().decode(\"utf-8\", errors=\"ignore\")\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/smart_content.py",
       "line": 295,
       "excerpt": "        )\n\n        resp = urllib.request.urlopen(req, timeout=60)\n        data = json.loads(resp.read().decode(\"utf-8\"))\n        content = data[\"choices\"][0][\"message\"][\"content\"]",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/hermes_browser/webhooks.py",
       "line": 263,
       "excerpt": "            )\n            try:\n                resp = urllib.request.urlopen(req, timeout=self.timeout)\n                return resp.getcode()\n            except urllib.error.HTTPError as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Basic Auth Credentials, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Basic Auth Credentials at src/hermes_browser/proxy_pool.py:8; Secret Keyword at tests/test_webhooks.py:27; Secret Keyword at tests/test_webhooks.py:219",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 86 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ECD5A/tkach-security",
   "version": "0.1.2",
   "slug": "io-github-ecd5a-tkach-security",
   "scanned_at": "2026-10-16T02:33:12+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ECD5A/Tkach-Security",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "d773070adefe5ac53b6459ed223bedfc32afa4c8",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 14,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "sdk/go/tkachclient/client.go",
       "line": 247,
       "excerpt": "\n\turl := \"http://\" + net.JoinHostPort(host, strconv.Itoa(port)) + path\n\trequest, err := http.NewRequest(method, url, bytes.NewReader(body))\n\tif err != nil {\n\t\treturn Response{}, &Error{Code: ErrorInvalidRequest}",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Basic Auth Credentials, Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at .github/workflows/publish-mcp.yml:33; Basic Auth Credentials at crates/tkach-provider-openai/src/config.rs:223",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 27 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 27 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "17 vulnerabilities were found and none could be placed in `03` §6's table — no CVSS score, or an ecosystem whose manifest we cannot parse for direct-vs-transitive",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "quinn-proto 0.11.17 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.17 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.17 — RUSTSEC-2026-0343",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0343",
       "finding": "quinn-proto:RUSTSEC-2026-0343",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.17 — RUSTSEC-2026-0343",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0343",
       "finding": "quinn-proto:RUSTSEC-2026-0343",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0346",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 4.0, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0346",
       "finding": "rustls:RUSTSEC-2026-0346",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0346",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 4.0, fixed in 0.23.46",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0346",
       "finding": "rustls:RUSTSEC-2026-0346",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0348",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0348",
       "finding": "rustls:RUSTSEC-2026-0348",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0348",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0348",
       "finding": "rustls:RUSTSEC-2026-0348",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0349",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0349",
       "finding": "rustls:RUSTSEC-2026-0349",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0349",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0349",
       "finding": "rustls:RUSTSEC-2026-0349",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "lru 0.12.5 — RUSTSEC-2026-0002",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 2.7, fixed in 0.16.3",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0002",
       "finding": "lru:RUSTSEC-2026-0002",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0347",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 2.3, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0347",
       "finding": "rustls:RUSTSEC-2026-0347",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0347",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 2.3, fixed in 0.23.46",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0347",
       "finding": "rustls:RUSTSEC-2026-0347",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "lru 0.12.5 — RUSTSEC-2026-0253",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.18.2",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0253",
       "finding": "lru:RUSTSEC-2026-0253",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "paste 1.0.15 — RUSTSEC-2024-0436",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2024-0436",
       "finding": "paste:RUSTSEC-2024-0436",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.17 — RUSTSEC-2026-0338",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.11.18",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0338",
       "finding": "quinn-proto:RUSTSEC-2026-0338",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.17 — RUSTSEC-2026-0338",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.11.18",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0338",
       "finding": "quinn-proto:RUSTSEC-2026-0338",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 67,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ErikEJ/SqlServer.Rules",
   "version": "1.0",
   "slug": "io-github-erikej-sqlserver-rules",
   "scanned_at": "2026-10-16T02:33:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ErikEJ/SqlServer.Rules",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "ab012eb772c39aceded8f25c299ded45d6520fb8",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at docs/Design/SRD0075.md:39; Base64 High Entropy String at sqlprojects/AW/Tables/BillOfMaterials.sql:24; Secret Keyword at sqlprojects/TSQLSmellsTest/HardCodedCredentialsTest.sql:7",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 97,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 8 issue(s) in the last 6 months: 0.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 37 days (by releases), last release 152 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 63,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-5jgf-p345-68v8",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5jgf-p345-68v8",
       "finding": "fast-uri:GHSA-5jgf-p345-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.3.1 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "transitive, CVSS 7.5, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-w293-vg96-wgc3",
       "detail": "transitive, CVSS 7.4, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w293-vg96-wgc3",
       "finding": "undici:GHSA-w293-vg96-wgc3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-2jfj-6hjv-fm6j",
       "detail": "transitive, CVSS 6.5, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2jfj-6hjv-fm6j",
       "finding": "undici:GHSA-2jfj-6hjv-fm6j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "markdown-it 14.3.0 — GHSA-253c-mchw-3w2r",
       "detail": "transitive, CVSS 6.3, fixed in 14.3.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-253c-mchw-3w2r",
       "finding": "markdown-it:GHSA-253c-mchw-3w2r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-3wwx-pv8p-q78v",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3wwx-pv8p-q78v",
       "finding": "undici:GHSA-3wwx-pv8p-q78v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-3xpg-4rpp-hhhm",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3xpg-4rpp-hhhm",
       "finding": "undici:GHSA-3xpg-4rpp-hhhm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-pmjh-fq2x-6v4x",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmjh-fq2x-6v4x",
       "finding": "undici:GHSA-pmjh-fq2x-6v4x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-rx4f-c7p8-82vq",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rx4f-c7p8-82vq",
       "finding": "undici:GHSA-rx4f-c7p8-82vq",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 5.0.12",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-2gqq-gqf2-x968",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2gqq-gqf2-x968",
       "finding": "undici:GHSA-2gqq-gqf2-x968",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-8436-99hf-9mmv",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8436-99hf-9mmv",
       "finding": "undici:GHSA-8436-99hf-9mmv",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-r53p-7pc4-xj5r",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "vscode-extension/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r53p-7pc4-xj5r",
       "finding": "undici:GHSA-r53p-7pc4-xj5r",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ExpertVagabond/guardrails",
   "version": "1.0.1",
   "slug": "io-github-expertvagabond-guardrails",
   "scanned_at": "2026-10-16T02:33:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ExpertVagabond/guardrails-mcp-server.git",
   "package": "npm:guardrails-mcp-server@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/validators/InputValidator.js",
       "line": 230,
       "excerpt": "    for (const field of fieldsToSanitize) {\n      if (sanitized[field] && typeof sanitized[field] === 'string') {\n        sanitized[field] = this.sanitizeString(sanitized[field]);\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 49 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 40,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Fato07/log-analyzer-mcp",
   "version": "0.4.2",
   "slug": "io-github-fato07-log-analyzer-mcp",
   "scanned_at": "2026-10-16T02:33:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Fato07/log-analyzer-mcp",
   "package": "pypi:codesdevs-log-analyzer@0.4.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 31,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "14 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 52,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 273 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 273 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "cryptography 46.0.3 — PYSEC-2026-36",
       "detail": "transitive, CVSS 9.8, fixed in 46.0.7",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.25.0 — PYSEC-2026-3481",
       "detail": "direct, CVSS 7.6, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3481",
       "finding": "mcp:PYSEC-2026-3481",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.25.0 — PYSEC-2026-3483",
       "detail": "direct, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.25.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "mcp 1.25.0 — PYSEC-2026-3482",
       "detail": "direct, CVSS 7.1, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3482",
       "finding": "mcp:PYSEC-2026-3482",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.3 — PYSEC-2026-3553",
       "detail": "transitive, CVSS 8.7, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.21 — PYSEC-2026-1852",
       "detail": "transitive, CVSS 8.6, fixed in 0.0.22",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1852",
       "finding": "python-multipart:PYSEC-2026-1852",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.3 — PYSEC-2026-2141",
       "detail": "transitive, CVSS 8.2, fixed in 46.0.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2141",
       "finding": "cryptography:PYSEC-2026-2141",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.3 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.3 — GHSA-537c-gmf6-5ccf",
       "detail": "transitive, CVSS 7.5, fixed in 48.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-537c-gmf6-5ccf",
       "finding": "cryptography:GHSA-537c-gmf6-5ccf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-120",
       "detail": "transitive, CVSS 7.5, fixed in 2.12.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-120",
       "finding": "pyjwt:PYSEC-2026-120",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.21 — PYSEC-2026-3036",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3036",
       "finding": "python-multipart:PYSEC-2026-3036",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.21 — PYSEC-2026-3039",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.27",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3039",
       "finding": "python-multipart:PYSEC-2026-3039",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.51.0 — PYSEC-2026-2281",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2281",
       "finding": "starlette:PYSEC-2026-2281",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.51.0 — PYSEC-2026-249",
       "detail": "transitive, CVSS 7.5, fixed in 1.3.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-249",
       "finding": "starlette:PYSEC-2026-249",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-179",
       "detail": "transitive, CVSS 7.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-179",
       "finding": "pyjwt:PYSEC-2026-179",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2025-183",
       "detail": "transitive, CVSS 7.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2025-183",
       "finding": "pyjwt:PYSEC-2025-183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pytest 9.0.2 — PYSEC-2026-1845",
       "detail": "direct, CVSS 6.8, fixed in 9.0.3",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1845",
       "finding": "pytest:PYSEC-2026-1845",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.3 — PYSEC-2026-3554",
       "detail": "transitive, CVSS 6.9, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3554",
       "finding": "cryptography:PYSEC-2026-3554",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "idna 3.11 — PYSEC-2026-215",
       "detail": "transitive, CVSS 6.9, fixed in 3.15",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-215",
       "finding": "idna:PYSEC-2026-215",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-dotenv 1.2.1 — PYSEC-2026-2270",
       "detail": "transitive, CVSS 6.6, fixed in 1.2.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2270",
       "finding": "python-dotenv:PYSEC-2026-2270",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.51.0 — PYSEC-2026-161",
       "detail": "transitive, CVSS 6.5, fixed in 1.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-161",
       "finding": "starlette:PYSEC-2026-161",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-176",
       "detail": "transitive, CVSS 5.4, fixed in 2.12.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-176",
       "finding": "pyjwt:PYSEC-2026-176",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.3 — PYSEC-2026-35",
       "detail": "transitive, CVSS 5.3, fixed in 46.0.6",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-35",
       "finding": "cryptography:PYSEC-2026-35",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pydantic-settings 2.12.0 — GHSA-4xgf-cpjx-pc3j",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xgf-cpjx-pc3j",
       "finding": "pydantic-settings:GHSA-4xgf-cpjx-pc3j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-178",
       "detail": "transitive, CVSS 5.3, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-178",
       "finding": "pyjwt:PYSEC-2026-178",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.21 — PYSEC-2026-3038",
       "detail": "transitive, CVSS 5.3, fixed in 0.0.26",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3038",
       "finding": "python-multipart:PYSEC-2026-3038",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.51.0 — PYSEC-2026-2280",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2280",
       "finding": "starlette:PYSEC-2026-2280",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 0.51.0 — PYSEC-2026-248",
       "detail": "transitive, CVSS 5.3, fixed in 1.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-248",
       "finding": "starlette:PYSEC-2026-248",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-175",
       "detail": "transitive, CVSS 4.2, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-175",
       "finding": "pyjwt:PYSEC-2026-175",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.10.1 — PYSEC-2026-177",
       "detail": "transitive, CVSS 3.7, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-177",
       "finding": "pyjwt:PYSEC-2026-177",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.21 — PYSEC-2026-3037",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3037",
       "finding": "python-multipart:PYSEC-2026-3037",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.21 — PYSEC-2026-3040",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.31",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3040",
       "finding": "python-multipart:PYSEC-2026-3040",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.21 — PYSEC-2026-3041",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3041",
       "finding": "python-multipart:PYSEC-2026-3041",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pygments 2.19.2 — PYSEC-2026-2987",
       "detail": "transitive, CVSS 3.3, fixed in 2.20.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2987",
       "finding": "pygments:PYSEC-2026-2987",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.FedgeNo/conventions-mcp",
   "version": "3.1.1",
   "slug": "io-github-fedgeno-conventions-mcp",
   "scanned_at": "2026-10-16T02:33:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/FedgeNo/conventions-mcp",
   "package": "npm:conventions-mcp@3.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 11,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (key) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "7 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 29 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.GPTHuman-ai/humanizer",
   "version": "1.0.4",
   "slug": "io-github-gpthuman-ai-humanizer",
   "scanned_at": "2026-10-16T02:33:31+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/GPTHuman-ai/mcp-server",
   "package": "npm:@gpthuman/mcp-server@1.0.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "32811e2be4aa6a3736ed4494ab5884e4a9c5b90a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 1.0.4, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.gpthuman.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:53; Secret Keyword at README.md:183",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 38 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by tags), last release 63 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.GabiUp2/taskchampion-mcp",
   "version": "1.0.4",
   "slug": "io-github-gabiup2-taskchampion-mcp",
   "scanned_at": "2026-10-16T02:33:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/GabiUp2/TaskChampion_MCP",
   "package": "pypi:taskchampion-mcp@1.0.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "35 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 107 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 5 days (by releases), last release 130 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.GarAlex/promoshot",
   "version": "0.3.4",
   "slug": "io-github-garalex-promoshot",
   "scanned_at": "2026-10-16T02:33:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/GarAlex/promoshot",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "fc0be0f5b5f99a46ecd50cc68c62d27556902b38",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 13,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 73,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/c12-through-the-surfaces/reference.py",
       "line": 194,
       "excerpt": "if __name__ == '__main__':\n    doc = build()\n    json.dump(doc, open(os.path.join(HERE, 'reference.json'), 'w'), indent=1)\n    pkg = os.path.join(HERE, 'runs', 'reference', 'Through the surfaces.promo')\n    os.makedirs(os.path.join(pkg, 'Resources'), exist_ok=True)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/c12-through-the-surfaces/reference.py",
       "line": 197,
       "excerpt": "    pkg = os.path.join(HERE, 'runs', 'reference', 'Through the surfaces.promo')\n    os.makedirs(os.path.join(pkg, 'Resources'), exist_ok=True)\n    json.dump(doc, open(os.path.join(pkg, 'metadata.json'), 'w'), indent=1)\n    v = subprocess.run([CLI, 'validate', pkg], capture_output=True, text=True); print(v.stdout.strip()[:600] or v.stderr[-400:])\n    work = os.path.dirname(pkg)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/c13-carousel-of-films/reference.py",
       "line": 150,
       "excerpt": "if __name__ == '__main__':\n    doc = build()\n    json.dump(doc, open(os.path.join(HERE, 'reference.json'), 'w'), indent=1)\n    pkg = os.path.join(HERE, 'runs', 'reference', 'A carousel of films.promo')\n    os.makedirs(os.path.join(pkg, 'Resources'), exist_ok=True)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/c13-carousel-of-films/reference.py",
       "line": 153,
       "excerpt": "    pkg = os.path.join(HERE, 'runs', 'reference', 'A carousel of films.promo')\n    os.makedirs(os.path.join(pkg, 'Resources'), exist_ok=True)\n    json.dump(doc, open(os.path.join(pkg, 'metadata.json'), 'w'), indent=1)\n    v = subprocess.run([CLI, 'validate', pkg], capture_output=True, text=True); print(v.stdout.strip()[:1200] or v.stderr[-400:])\n    work = os.path.dirname(pkg)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/c9-infinite-screens/build.py",
       "line": 370,
       "excerpt": "    pkg = os.path.join(work, film['name'] + '.promo')\n    meta = build(film); scenes = meta.pop('_scenes'); materialize(meta, pkg)\n    json.dump(meta, open(os.path.join(HERE, film['reference']), 'w'), indent=1)\n    print('scenes:', [(n, round(t, 2), round(d, 2)) for n, t, d in scenes], 'total', round(meta['videoDuration'], 2))\n    v = subprocess.run([CLI, 'validate', pkg], capture_output=True, text=True); print(v.stdout.strip()[:800])",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/creative.py",
       "line": 13,
       "excerpt": "import json, os, shutil\nHERE = os.path.dirname(os.path.abspath(__file__))\nTASK = open(os.path.join(HERE, 'task.md')).read()\n\nSETS = [",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/creative.py",
       "line": 81,
       "excerpt": "            prompt += \"\\nFiles in `resources/`: \" + \", \".join(media) + \".\\n\"\n        prompt += TASK\n        open(os.path.join(folder, 'prompt.md'), 'w').write(prompt)\n        json.dump({\"kind\": \"creative\", \"template\": f\"{s['id'].upper()} {s['title']}\", \"media\": media,\n                   \"duration\": s['duration'], \"must_use\": s['must_use']},",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/creative.py",
       "line": 84,
       "excerpt": "        json.dump({\"kind\": \"creative\", \"template\": f\"{s['id'].upper()} {s['title']}\", \"media\": media,\n                   \"duration\": s['duration'], \"must_use\": s['must_use']},\n                  open(os.path.join(folder, 'rubric.json'), 'w'), indent=1)\n        print(f\"  {os.path.basename(folder)}: {len(media)} files\")\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/import_templates.py",
       "line": 16,
       "excerpt": "SHARED_OVER = 1_000_000\n\nPROMPTS = json.load(open(os.path.join(HERE, 'prompts.json')))\nTASK = open(os.path.join(HERE, 'task.md')).read()\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/import_templates.py",
       "line": 17,
       "excerpt": "\nPROMPTS = json.load(open(os.path.join(HERE, 'prompts.json')))\nTASK = open(os.path.join(HERE, 'task.md')).read()\n\ndef slug(name):",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/import_templates.py",
       "line": 31,
       "excerpt": "        if nn not in PROMPTS:\n            continue\n        meta = json.load(open(os.path.join(lib, d, 'metadata.json')))\n        name = d[:-6]\n        folder = os.path.join(HERE, f\"{nn}-{slug(name[3:])}\")",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/import_templates.py",
       "line": 51,
       "excerpt": "                shutil.copy2(src, os.path.join(folder, 'resources', f))\n            media.append(f)\n        json.dump(meta, open(os.path.join(folder, 'reference.json'), 'w'), indent=1)\n        rubric = rubric_from(meta, name, media)\n        prompt = PROMPTS[nn].strip() + \"\\n\"",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/import_templates.py",
       "line": 59,
       "excerpt": "            prompt += \"\\nText to use, in order:\\n\" + \"\".join(f\"- {t}\\n\" for t in rubric['phrases'])\n        prompt += TASK\n        open(os.path.join(folder, 'prompt.md'), 'w').write(prompt)\n        json.dump(rubric, open(os.path.join(folder, 'rubric.json'), 'w'), indent=1)\n        print(f\"  {os.path.basename(folder)}: {len(media)} files, {len(rubric['phrases'])} lines\")",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/import_templates.py",
       "line": 60,
       "excerpt": "        prompt += TASK\n        open(os.path.join(folder, 'prompt.md'), 'w').write(prompt)\n        json.dump(rubric, open(os.path.join(folder, 'rubric.json'), 'w'), indent=1)\n        print(f\"  {os.path.basename(folder)}: {len(media)} files, {len(rubric['phrases'])} lines\")\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 64,
       "excerpt": "    stats = {}\n    try:\n        j = json.load(open(os.path.join(run, 'agent.json')))\n    except Exception:\n        return stats",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 150,
       "excerpt": "    return f\"| {pic} | [{template}](docs/demo/demo{ident(name)}.md) | {blurb} | {films} |\"\n\nBLURBS = json.load(open(os.path.join(HERE, 'blurbs.json'))) if os.path.exists(os.path.join(HERE, 'blurbs.json')) else {}\n\ndef publish_showcase(name, demo, rubric, srows):",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 160,
       "excerpt": "    shutil.rmtree(out, ignore_errors=True)\n    os.makedirs(out)\n    prompt = open(os.path.join(demo, 'prompt.md')).read().strip()\n    open(os.path.join(out, 'prompt.md'), 'w').write(prompt + \"\\n\")\n    blurb = rubric.get('blurb') or prompt.split('.')[0].strip() + '.'",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 161,
       "excerpt": "    os.makedirs(out)\n    prompt = open(os.path.join(demo, 'prompt.md')).read().strip()\n    open(os.path.join(out, 'prompt.md'), 'w').write(prompt + \"\\n\")\n    blurb = rubric.get('blurb') or prompt.split('.')[0].strip() + '.'\n    result = {\"films\": []}",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 222,
       "excerpt": "        pg.append(\"\")\n    pg += [\"---\", \"\", \"[← all demos](../../demo.md) · [how the suite works](../../demos/README.md)\", \"\"]\n    open(os.path.join(ASSETS, f\"demo{ident(name)}.md\"), 'w').write(\"\\n\".join(pg))\n    srows.append(showcase_row(name, rubric['template'], blurb, result))\n    return {\"id\": ident(name), \"slug\": name, \"title\": title_of(rubric), \"blurb\": blurb, \"kind\": \"showcase\",",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 234,
       "excerpt": "    if only:\n        try:\n            previous = {m['slug']: m for m in json.load(open(os.path.join(ASSETS, 'demo.json')))}\n        except Exception:\n            previous = {}",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 247,
       "excerpt": "        if not (os.path.isdir(demo) and (ident(name).isdigit() or creative) and os.path.exists(os.path.join(demo, 'rubric.json'))):\n            continue\n        rubric = json.load(open(os.path.join(demo, 'rubric.json')))\n        if only and name not in only and name in previous:\n            # Untouched: the entry, the page and the assets stand as published.",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 260,
       "excerpt": "            manifest.append(publish_showcase(name, demo, rubric, srows))\n            continue\n        prompt = open(os.path.join(demo, 'prompt.md')).read().strip()\n        user_prompt = prompt.split('\\nUse the PromoShot skill')[0].strip()\n        out = os.path.join(ASSETS, name)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 284,
       "excerpt": "                        entry[\"poster\"] = f\"docs/demo/{name}/resources/{os.path.basename(p)}\"\n            resources.append(entry)\n        open(os.path.join(out, 'prompt.md'), 'w').write(user_prompt + \"\\n\")\n        run = latest_run(demo)\n        result = None",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 288,
       "excerpt": "        result = None\n        if run:\n            score = json.load(open(os.path.join(run, 'score.json')))\n            summary_path = os.path.join(run, 'summary.txt')\n            summary = open(summary_path).read().strip() if os.path.exists(summary_path) else ''",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 295,
       "excerpt": "                      \"run\": run_stats(run), \"used\": score.get('used'), \"captions\": score.get('captions')}\n            try:\n                notes = json.load(open(os.path.join(run, 'agent.json'))).get('result') or ''\n                result[\"notes\"] = notes.strip()[:1800]\n            except Exception:",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 406,
       "excerpt": "            pg += [\"## What the agent made\", \"\", \"*Not run yet.*\", \"\"]\n        pg += [\"---\", \"\", \"[← all demos](../../demo.md) · [how the suite works](../../demos/README.md)\", \"\"]\n        open(os.path.join(ASSETS, f\"demo{ident(name)}.md\"), 'w').write(\"\\n\".join(pg))\n\n        # --- the index row ---",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 469,
       "excerpt": "    if srows:\n        index += showcase_head + \"\\n\".join(srows) + \"\\n\"\n    open(os.path.join(CORE, 'demo.md'), 'w').write(index)\n    json.dump(manifest, open(os.path.join(ASSETS, 'demo.json'), 'w'), indent=1)\n    done = sum(1 for m in manifest if m['result'])",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/publish.py",
       "line": 470,
       "excerpt": "        index += showcase_head + \"\\n\".join(srows) + \"\\n\"\n    open(os.path.join(CORE, 'demo.md'), 'w').write(index)\n    json.dump(manifest, open(os.path.join(ASSETS, 'demo.json'), 'w'), indent=1)\n    done = sum(1 for m in manifest if m['result'])\n    print(f\"demo.md: {len(manifest)} demos, {done} with results; pages and assets in docs/demo\")",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/scenario_check.py",
       "line": 57,
       "excerpt": "def main():\n    demo, run = sys.argv[1], sys.argv[2]\n    expect = json.load(open(os.path.join(demo, \"scenario.json\"))).get(\"expect\", {})\n    ws = os.path.join(run, \"ws\")\n    calls, answer = transcript(run)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/score.py",
       "line": 83,
       "excerpt": "\ndef score(demo, project):\n    rubric = json.load(open(os.path.join(demo, 'rubric.json')))\n    meta = json.load(open(os.path.join(project, 'metadata.json')))\n    if rubric.get('kind') == 'creative':",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "demos/score.py",
       "line": 84,
       "excerpt": "def score(demo, project):\n    rubric = json.load(open(os.path.join(demo, 'rubric.json')))\n    meta = json.load(open(os.path.join(project, 'metadata.json')))\n    if rubric.get('kind') == 'creative':\n        return score_creative(rubric, meta, project)",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "promo-cli/examples/chapters.py",
       "line": 474,
       "excerpt": "    uuidify(meta)\n    meta = merge_into_existing(out_dir, meta)\n    with open(os.path.join(out_dir, \"metadata.json\"), \"w\") as handle:\n        json.dump(meta, handle, indent=2)\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "promo-cli/examples/marketing.py",
       "line": 206,
       "excerpt": "    for src, filename in assets:\n        shutil.copyfile(src, os.path.join(out_dir, \"Resources\", filename))\n    with open(os.path.join(out_dir, \"metadata.json\"), \"w\") as f:\n        json.dump(meta, f, indent=2)\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "promo-cli/examples/reel.py",
       "line": 212,
       "excerpt": "        cursor = start + usable - FADE\n\n    with open(os.path.join(out_dir, \"metadata.json\"), \"w\") as f:\n        json.dump(meta, f, indent=2)\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 12 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at demos/07-narrated-tour/reference.json:76; Hex High Entropy String at demos/07-narrated-tour/reference.json:92; Hex High Entropy String at demos/07-narrated-tour/reference.json:108; Hex High Entropy String at demos/07-narrated-tour/reference.json:124; Hex High Entropy String at demos/07-narrated-tour/reference.json:140; Hex High Entropy String at demos/21-chapters-levels/reference.json:80; Hex High Entropy String at demos/21-chapters-levels/reference.json:107; Hex High Entropy String at demos/21-chapters-levels/reference.json:134; Hex High Entropy String at demos/21-chapters-levels/reference.json:161; Hex High Entropy String at demos/21-chapters-levels/reference.json:188; …and 2 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 14 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 42.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 14 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "7 vulnerabilities were found and none could be placed in `03` §6's table — no CVSS score, or an ecosystem whose manifest we cannot parse for direct-vs-transitive",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "rustls 0.23.43 — RUSTSEC-2026-0285",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.3, fixed in 0.23.45",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0285",
       "finding": "rustls:RUSTSEC-2026-0285",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.43 — RUSTSEC-2026-0346",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 4.0, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0346",
       "finding": "rustls:RUSTSEC-2026-0346",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.43 — RUSTSEC-2026-0348",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0348",
       "finding": "rustls:RUSTSEC-2026-0348",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.43 — RUSTSEC-2026-0349",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0349",
       "finding": "rustls:RUSTSEC-2026-0349",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "paste 1.0.15 — RUSTSEC-2024-0436",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2024-0436",
       "finding": "paste:RUSTSEC-2024-0436",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "ttf-parser 0.21.1 — RUSTSEC-2026-0192",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0192",
       "finding": "ttf-parser:RUSTSEC-2026-0192",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "ttf-parser 0.25.1 — RUSTSEC-2026-0192",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0192",
       "finding": "ttf-parser:RUSTSEC-2026-0192",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Hylouis233/bibverify",
   "version": "0.3.0",
   "slug": "io-github-hylouis233-bibverify",
   "scanned_at": "2026-10-16T02:34:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Hylouis233/bibverify",
   "package": "pypi:bibverify@0.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 34,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at tests/test_config.py:30; Secret Keyword at tests/test_config.py:38",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 1 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 0.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 7 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 24,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.JasonColapietro/suede-skills-mcp",
   "version": "0.19.0",
   "slug": "io-github-jasoncolapietro-suede-skills-mcp",
   "scanned_at": "2026-10-16T02:34:17+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/JasonColapietro/suede-creator-skills",
   "package": "npm:suede-skills-mcp@0.19.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 48.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 73 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.JaviMaligno/vitamind",
   "version": "1.0.0",
   "slug": "io-github-javimaligno-vitamind",
   "scanned_at": "2026-10-16T02:34:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/JaviMaligno/vitamind",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "6aedc0ae562efaaf98587dc7496be4b76c013dbb",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 401,
   "files_pruned": 5,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 72,
     "reason": "35 findings in test code are listed but not deducted; 5 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 20,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "i18n/client-messages.ts",
       "line": 127,
       "excerpt": "  const picked: MessageTree = {};\n  for (const namespace of CLIENT_NAMESPACES) {\n    if (namespace in messages) picked[namespace] = messages[namespace];\n  }\n  return picked;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "i18n/metadata.ts",
       "line": 16,
       "excerpt": "  const languages: Record<string, string> = {};\n  for (const l of routing.locales) {\n    languages[l] = `${SITE_URL}${getPathname({ href: pathname, locale: l })}`;\n  }\n  languages[\"x-default\"] = `${SITE_URL}${getPathname({ href: pathname, locale: routing.defaultLocale })}`;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "lib/city-routes.ts",
       "line": 67,
       "excerpt": "  const index: Record<string, Record<string, string>> = {};\n  for (const locale of routing.locales) {\n    index[locale] = {};\n    for (const city of BUILTIN_CITIES) {\n      index[locale][localizedCitySlug(locale, baseSlug(city.id))] = city.id;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "lib/content-fingerprint.ts",
       "line": 327,
       "excerpt": "  const out: Record<string, string> = {};\n  for (const path of paths) {\n    out[path] = readFileSync(join(process.cwd(), path), \"utf8\").replace(/\\r\\n/g, \"\\n\");\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/build-widgets.mjs",
       "line": 37,
       "excerpt": "    for (const key of keys) {\n      if (typeof ns[key] !== \"string\") throw new Error(`messages/${locale}.json: falta ${namespace}.${key}`);\n      picked[key] = ns[key];\n    }\n    byLocale[locale] = picked;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/build-widgets.mjs",
       "line": 39,
       "excerpt": "      picked[key] = ns[key];\n    }\n    byLocale[locale] = picked;\n  }\n  const out = `// Generated by scripts/build-widgets.mjs from messages/*.json. Do not edit.",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/seed-cities.ts",
       "line": 104,
       "excerpt": "    const r = rows[i];\n    if (r.slug) {\n      slugs[i] = r.slug;\n      continue;\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/seed-cities.ts",
       "line": 112,
       "excerpt": "      : base;\n    taken.add(slug);\n    slugs[i] = slug;\n  }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/push/notify/route.ts",
       "line": 80,
       "excerpt": "  // Timeout so one stalled Open-Meteo call can't hang the whole cron run past\n  // the function limit (subscriptions are processed sequentially).\n  const res = await fetch(url, { signal: AbortSignal.timeout(8000) }).catch(() => null);\n  if (!res || !res.ok) return [];\n  const data = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/revalidate-today/route.ts",
       "line": 109,
       "excerpt": "        // Vercel cache key for these routes, so it would buy nothing and only\n        // make the probe fetch a URL no reader ever requests.\n        const res = await fetch(sample.url, {\n          cache: \"no-store\",\n          signal: AbortSignal.timeout(PROBE_TIMEOUT_MS),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/weather/route.ts",
       "line": 68,
       "excerpt": "    const pooled = !(start && end) && url.origin + url.pathname === FORECAST_URL;\n    upstreamUrl = url.toString();\n    const main = fetch(upstreamUrl, { signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS) });\n    const radUrl = radiationUrl(url);\n    const radiation = pooled",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/weather/route.ts",
       "line": 71,
       "excerpt": "    const radUrl = radiationUrl(url);\n    const radiation = pooled\n      ? fetch(radUrl, { signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS) })\n          .then((r) => {\n            if (r.ok) return r.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "lib/mcp-tools.ts",
       "line": 688,
       "excerpt": "    // with Open-Meteo's own UV as the fallback (lib/cloud-transmission.ts).\n    upstreamUrl = url.toString();\n    const main = fetch(upstreamUrl, { signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS) });\n    const radUrl = radiationUrl(url);\n    const radiation = fetch(radUrl, { signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS) })",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "lib/mcp-tools.ts",
       "line": 690,
       "excerpt": "    const main = fetch(upstreamUrl, { signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS) });\n    const radUrl = radiationUrl(url);\n    const radiation = fetch(radUrl, { signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS) })\n      .then((r) => {\n        if (r.ok) return r.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "lib/weather-range.ts",
       "line": 91,
       "excerpt": "export const fetchWeatherRange: WeatherRangeFetcher = async (lat, lon, from, to) => {\n  try {\n    const res = await fetch(rangeUrl(lat, lon, from, to), {\n      signal: AbortSignal.timeout(UPSTREAM_TIMEOUT_MS),\n    });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/analyze2.py",
       "line": 10,
       "excerpt": "MIN_ELEV = 25\nR = []\nfor r in csv.DictReader(open(os.path.join(S, \"rows2.csv\"))):\n    e = float(r[\"elev\"])\n    if e < MIN_ELEV: continue",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/cross.py",
       "line": 6,
       "excerpt": "def load(f): return [r for r in json.load(f) if all(r[m] is not None for m in M5 + [\"best_match\"])]\nHERE = os.path.dirname(os.path.abspath(__file__))\nDE, US = (load(open(os.path.join(HERE, f))) for f in (\"dwd_rows.json\", \"surfrad_rows.json\"))\ndef fit(rows):\n    X = np.array([[r[m] for m in M5] + [1] for r in rows]); y = np.array([r[\"gnd\"] for r in rows]); return nnls(X, y)[0]",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/dwd.py",
       "line": 25,
       "excerpt": "    out[\"dwd\" + sid] = {\"name\": name, \"lat\": lat, \"lon\": lon, \"hourly\": hourly}\n    print(name, len(hourly), file=sys.stderr, flush=True)\njson.dump(out, open(os.path.join(S, \"dwd.json\"), \"w\"))",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/fetch2.py",
       "line": 4,
       "excerpt": "import json, math, time, calendar, urllib.request, sys, csv, os\nS = os.path.dirname(os.path.abspath(__file__))\ncities = json.load(open(os.path.join(S, \"cities.json\")))\nMODELS = [\"best_match\",\"ukmo_seamless\",\"meteofrance_seamless\",\"ecmwf_ifs025\",\"icon_seamless\",\"gfs_seamless\"]\nPERIODS = [(\"2024-09-01\",\"2025-08-31\"),(\"2025-09-01\",\"2026-09-20\")]",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/cloud-backtest/fetch2.py",
       "line": 10,
       "excerpt": "    err = None\n    for a in range(6):\n        try: return json.load(urllib.request.urlopen(url, timeout=120))\n        except Exception as e: err = e; time.sleep(5*(a+1))\n    raise err",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/fetch2.py",
       "line": 21,
       "excerpt": "    la = math.radians(lat)\n    return math.degrees(math.asin(math.sin(la)*math.sin(dec) + math.cos(la)*math.cos(dec)*math.cos(ha)))\nout = open(os.path.join(S, \"rows2.csv\"), \"w\", newline=\"\"); w = csv.writer(out)\nw.writerow([\"city\",\"lat\",\"lon\",\"time_utc\",\"elev\",\"obs\"] + MODELS)\nfor c in cities:",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/cloud-backtest/ground.py",
       "line": 16,
       "excerpt": "def get(url):\n    for a in range(5):\n        try: return json.load(urllib.request.urlopen(url, timeout=120))\n        except Exception as e: err = e; time.sleep(5)\n    raise err",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/ground.py",
       "line": 19,
       "excerpt": "        except Exception as e: err = e; time.sleep(5)\n    raise err\nG = json.load(open(os.path.join(S, sys.argv[1])))\nrows = []\nfor code, st in G.items():",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/ground.py",
       "line": 43,
       "excerpt": "        rows.append(r)\n    print(code, sum(1 for r in rows if r[\"st\"] == code), file=sys.stderr, flush=True)\njson.dump(rows, open(os.path.join(S, sys.argv[1].replace(\".json\",\"_rows.json\")), \"w\"))\n\nprint(\"\\n1) DOES THE SATELLITE RANK MODELS LIKE THE GROUND DOES?  (day-ahead, sun > 25 deg, MAE of clear-sky index)\")",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/cloud-backtest/surfrad.py",
       "line": 14,
       "excerpt": "        yy = day.strftime(\"%y\"); jd = day.timetuple().tm_yday\n        url = f\"https://gml.noaa.gov/aftp/data/radiation/surfrad/{code}/{day.year}/{code}{yy}{jd:03d}.dat\"\n        try: txt = urllib.request.urlopen(url, timeout=60).read().decode(\"latin-1\")\n        except Exception: continue\n        lines = txt.splitlines()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/surfrad.py",
       "line": 34,
       "excerpt": "    out[code] = {\"name\": ST[code], \"lat\": meta[0], \"lon\": meta[1], \"elev_m\": meta[2], \"hourly\": hourly}\n    print(f\"{code}: {nf} files, {len(hourly)} hours\", file=sys.stderr, flush=True)\njson.dump(out, open(os.path.join(S, \"surfrad.json\"), \"w\"))",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/uv_check.py",
       "line": 6,
       "excerpt": "import numpy as np\nS = os.path.dirname(os.path.abspath(__file__))\nrows = json.load(open(os.path.join(S, \"surfrad_rows.json\"))); G = json.load(open(os.path.join(S, \"surfrad.json\")))\nM5 = [\"ukmo_seamless\",\"meteofrance_seamless\",\"ecmwf_ifs025\",\"icon_seamless\",\"gfs_seamless\"]\nom = {}",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "scripts/cloud-backtest/uv_check.py",
       "line": 6,
       "excerpt": "import numpy as np\nS = os.path.dirname(os.path.abspath(__file__))\nrows = json.load(open(os.path.join(S, \"surfrad_rows.json\"))); G = json.load(open(os.path.join(S, \"surfrad.json\")))\nM5 = [\"ukmo_seamless\",\"meteofrance_seamless\",\"ecmwf_ifs025\",\"icon_seamless\",\"gfs_seamless\"]\nom = {}",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/cloud-backtest/uv_check.py",
       "line": 12,
       "excerpt": "    # previous-runs' uv_index_previous_day1 comes back null, so Open-Meteo's UV is\n    # taken from the historical host: short lead, i.e. an ADVANTAGE to method A.\n    h = json.load(urllib.request.urlopen(f\"https://historical-forecast-api.open-meteo.com/v1/forecast?latitude={st['lat']}&longitude={st['lon']}&hourly=uv_index,uv_index_clear_sky&timezone=GMT&start_date=2025-09-01&end_date=2026-08-31\", timeout=120))[\"hourly\"]\n    for t, u, c in zip(h[\"time\"], h[\"uv_index\"], h[\"uv_index_clear_sky\"]):\n        if u is not None and c and c > 0.5: om[(code, t)] = u / c",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/generate-icons.mjs",
       "line": 65,
       "excerpt": "for (const size of sizes) {\n  const svg = createSunSVG(size);\n  fs.writeFileSync(path.join(outDir, `icon-${size}.svg`), svg);\n  console.log(`Created icon-${size}.svg`);\n}",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ozone-sample.ts",
       "line": 66,
       "excerpt": "  url.searchParams.set(\"start_date\", from);\n  url.searchParams.set(\"end_date\", to);\n  const res = await fetch(url.toString(), { signal: AbortSignal.timeout(TIMEOUT_MS) });\n  if (!res.ok) throw new Error(`${res.status} ${(await res.text()).slice(0, 200)}`);\n  return res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/setup-cities-table.ts",
       "line": 54,
       "excerpt": "  console.log(\"Project:\", PROJECT_REF);\n\n  const res = await fetch(mgmtUrl, {\n    method: \"POST\",\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "scripts/svg-to-png.mjs",
       "line": 10,
       "excerpt": "\nasync function convert(svgFile, pngFile, size) {\n  const svg = fs.readFileSync(path.join(iconsDir, svgFile));\n  await sharp(svg).resize(size, size).png().toFile(path.join(iconsDir, pngFile));\n  console.log(`${svgFile} -> ${pngFile} (${size}x${size})`);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/sw.template.js",
       "line": 69,
       "excerpt": "      caches.match(request).then((cached) => {\n        if (cached) return cached;\n        return fetch(request).then((response) => {\n          if (response.ok) {\n            const clone = response.clone();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/sw.template.js",
       "line": 83,
       "excerpt": "  // Pages: network-first, fallback to cache, then offline page\n  event.respondWith(\n    fetch(request)\n      .then((response) => {\n        if (response.ok) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 53,
       "excerpt": "  it(\"fails closed when CRON_SECRET is not configured\", async () => {\n    vi.stubEnv(\"CRON_SECRET\", \"\");\n    const res = await GET(request(URL_BASE, \"Bearer anything\"));\n    expect(res.status).toBe(500);\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 58,
       "excerpt": "\n  it(\"rejects a missing Authorization header\", async () => {\n    const res = await GET(request(URL_BASE));\n    expect(res.status).toBe(401);\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 63,
       "excerpt": "\n  it(\"rejects a wrong bearer token\", async () => {\n    const res = await GET(request(URL_BASE, \"Bearer wrong\"));\n    expect(res.status).toBe(401);\n    expect(getAllSubscriptions).not.toHaveBeenCalled();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 69,
       "excerpt": "\n  it(\"accepts the correct bearer token\", async () => {\n    const res = await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(res.status).toBe(200);\n    const body = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 78,
       "excerpt": "describe(\"/api/push/notify force-test gating\", () => {\n  it(\"rejects force=true when PUSH_TEST_ALLOWED_ENDPOINT is not set\", async () => {\n    const res = await GET(request(`${URL_BASE}?force=true`, \"Bearer test-secret\"));\n    expect(res.status).toBe(400);\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 88,
       "excerpt": "      { subscription: { endpoint: \"https://push.example/another\" } },\n    ]);\n    const res = await GET(request(`${URL_BASE}?force=true`, \"Bearer test-secret\"));\n    expect(res.status).toBe(200);\n    const body = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 100,
       "excerpt": "  it(\"does not leak internal error detail when the store throws\", async () => {\n    getAllSubscriptions.mockRejectedValue(new Error(\"supabase: column secret_column does not exist\"));\n    const res = await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(res.status).toBe(500);\n    const body = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 160,
       "excerpt": "  it(\"sends to a subscriber whose local clock is inside the morning window\", async () => {\n    at(\"2026-06-21T08:00:00Z\"); // 10:00 in Madrid\n    const res = await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(res.status).toBe(200);\n    expect(claimNotification).toHaveBeenCalledWith(\"https://push.example/madrid\", \"2026-06-21\");",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 169,
       "excerpt": "  it(\"does not send in the middle of the subscriber's night\", async () => {\n    at(\"2026-06-21T02:00:00Z\"); // 04:00 in Madrid\n    const res = await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(sendNotification).not.toHaveBeenCalled();\n    expect(claimNotification).not.toHaveBeenCalled();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 177,
       "excerpt": "  it(\"does not send after the subscriber's morning has passed\", async () => {\n    at(\"2026-06-21T16:00:00Z\"); // 18:00 in Madrid\n    await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(sendNotification).not.toHaveBeenCalled();\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 189,
       "excerpt": "    getAllSubscriptions.mockResolvedValue([madridSub({ tz: 1 })]);\n    at(\"2026-06-21T11:30:00Z\"); // 13:30 in Madrid — past the window\n    await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(sendNotification).not.toHaveBeenCalled();\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 196,
       "excerpt": "    getAllSubscriptions.mockResolvedValue([madridSub({ timezone: undefined, tz: 2 })]);\n    at(\"2026-06-21T08:00:00Z\");\n    await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(sendNotification).toHaveBeenCalledTimes(1);\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 217,
       "excerpt": "    getAllSubscriptions.mockResolvedValue([madridSub({ lastNotifiedOn: \"2026-06-21\" })]);\n    at(\"2026-06-21T08:00:00Z\");\n    const res = await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(claimNotification).not.toHaveBeenCalled();\n    expect(sendNotification).not.toHaveBeenCalled();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 226,
       "excerpt": "    getAllSubscriptions.mockResolvedValue([madridSub({ lastNotifiedOn: \"2026-06-20\" })]);\n    at(\"2026-06-21T08:00:00Z\");\n    await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(sendNotification).toHaveBeenCalledTimes(1);\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "app/api/__tests__/push-notify-route.test.ts",
       "line": 234,
       "excerpt": "    claimNotification.mockResolvedValue(false);\n    at(\"2026-06-21T08:00:00Z\");\n    const res = await GET(request(URL_BASE, \"Bearer test-secret\"));\n    expect(sendNotification).not.toHaveBeenCalled();\n    expect(await res.json()).toMatchObject({ sent: 0, deferred: 1 });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://getvitamind.app/api/mcp/mcp, https://getvitamind.app/api/mcp-auth/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 56 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at docs/analytics-results/2026-09-28-mcp-deployment.json:3; Hex High Entropy String at lib/content-revision.ts:263; Hex High Entropy String at lib/content-revision.ts:265; Hex High Entropy String at lib/content-revision.ts:266; Hex High Entropy String at lib/content-revision.ts:267; Hex High Entropy String at lib/content-revision.ts:268; Hex High Entropy String at lib/content-revision.ts:269; Hex High Entropy String at lib/content-revision.ts:308; Hex High Entropy String at lib/content-revision.ts:309; Hex High Entropy String at lib/content-revision.ts:310; …and 46 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "9 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 14 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (13 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 97,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "vitest 4.0.18 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 4.1.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-2xp9-vwfh-vxw4",
       "detail": "direct, CVSS 9.5, fixed in 16.3.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2xp9-vwfh-vxw4",
       "finding": "next:GHSA-2xp9-vwfh-vxw4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-p293-qw3h-jr36",
       "detail": "direct, CVSS 9.0, fixed in 16.3.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p293-qw3h-jr36",
       "finding": "next:GHSA-p293-qw3h-jr36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "direct, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "direct, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-c4j6-fc7j-m34r",
       "detail": "direct, CVSS 8.6, fixed in 16.2.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c4j6-fc7j-m34r",
       "finding": "next:GHSA-c4j6-fc7j-m34r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-6gpp-xcg3-4w24",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6gpp-xcg3-4w24",
       "finding": "next:GHSA-6gpp-xcg3-4w24",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-89xv-2m56-2m9x",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-89xv-2m56-2m9x",
       "finding": "next:GHSA-89xv-2m56-2m9x",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-cjq9-62q9-8jv4",
       "detail": "direct, CVSS 8.3, fixed in 16.3.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cjq9-62q9-8jv4",
       "finding": "next:GHSA-cjq9-62q9-8jv4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-p9j2-gv94-2wf4",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p9j2-gv94-2wf4",
       "finding": "next:GHSA-p9j2-gv94-2wf4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-m99w-x7hq-7vfj",
       "detail": "direct, CVSS 8.2, fixed in 16.2.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m99w-x7hq-7vfj",
       "finding": "next:GHSA-m99w-x7hq-7vfj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-492v-c6pp-mqqv",
       "detail": "direct, CVSS 8.1, fixed in 16.2.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-492v-c6pp-mqqv",
       "finding": "next:GHSA-492v-c6pp-mqqv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.16 — GHSA-7q85-xj36-vmfc",
       "detail": "direct, CVSS 7.5, fixed in 0.6.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7q85-xj36-vmfc",
       "finding": "adm-zip:GHSA-7q85-xj36-vmfc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.16 — GHSA-8238-w5pm-2374",
       "detail": "direct, CVSS 7.5, fixed in 0.6.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8238-w5pm-2374",
       "finding": "adm-zip:GHSA-8238-w5pm-2374",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.16 — GHSA-rcw4-f5rp-g42v",
       "detail": "direct, CVSS 7.5, fixed in 0.6.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rcw4-f5rp-g42v",
       "finding": "adm-zip:GHSA-rcw4-f5rp-g42v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.16 — GHSA-xcpc-8h2w-3j85",
       "detail": "direct, CVSS 7.5, fixed in 0.6.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xcpc-8h2w-3j85",
       "finding": "adm-zip:GHSA-xcpc-8h2w-3j85",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-267c-6grr-h53f",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-267c-6grr-h53f",
       "finding": "next:GHSA-267c-6grr-h53f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-26hh-7cqf-hhc6",
       "detail": "direct, CVSS 7.5, fixed in 16.2.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-26hh-7cqf-hhc6",
       "finding": "next:GHSA-26hh-7cqf-hhc6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-36qx-fr4f-26g5",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-36qx-fr4f-26g5",
       "finding": "next:GHSA-36qx-fr4f-26g5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-8h8q-6873-q5fj",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8h8q-6873-q5fj",
       "finding": "next:GHSA-8h8q-6873-q5fj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-mg66-mrh9-m8jx",
       "detail": "direct, CVSS 7.5, fixed in 16.2.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mg66-mrh9-m8jx",
       "finding": "next:GHSA-mg66-mrh9-m8jx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.1.6 — GHSA-q4gf-8mx6-v5v3",
       "detail": "direct, CVSS 7.5, fixed in 16.2.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q4gf-8mx6-v5v3",
       "finding": "next:GHSA-q4gf-8mx6-v5v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-6g55-p6wh-862q",
       "detail": "direct, CVSS 7.5, fixed in 8.5.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.8 — GHSA-6g55-p6wh-862q",
       "detail": "direct, CVSS 7.5, fixed in 8.5.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-r28c-9q8g-f849",
       "detail": "direct, CVSS 7.5, fixed in 8.5.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.8 — GHSA-r28c-9q8g-f849",
       "detail": "direct, CVSS 7.5, fixed in 8.5.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.16 — GHSA-j5f4-cc29-5x44",
       "detail": "direct, CVSS 7.1, fixed in 0.6.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j5f4-cc29-5x44",
       "finding": "adm-zip:GHSA-j5f4-cc29-5x44",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "direct, CVSS 7.0, fixed in 0.35.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.11 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.1 — GHSA-fx2h-pf6j-xcff",
       "detail": "transitive, CVSS 8.2, fixed in 7.3.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.1 — GHSA-p9ff-h696-f583",
       "detail": "transitive, CVSS 8.2, fixed in 7.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p9ff-h696-f583",
       "finding": "vite:GHSA-p9ff-h696-f583",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 7.3.1 — GHSA-v2wj-q39q-566r",
       "detail": "transitive, CVSS 8.2, fixed in 7.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2wj-q39q-566r",
       "finding": "vite:GHSA-v2wj-q39q-566r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 5.0.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.26.0 — GHSA-6qxp-vccf-f47h",
       "detail": "transitive, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.14 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.5 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.9",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 14,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.JinNing6/cyberhuatuo",
   "version": "0.2.5",
   "slug": "io-github-jinning6-cyberhuatuo",
   "scanned_at": "2026-10-16T02:34:33+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/JinNing6/CyberHuaTuo-Plugin",
   "package": "pypi:cyberhuatuo@0.2.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 42,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 85,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/case_sync.py",
       "line": 212,
       "excerpt": "        req = urllib.request.Request(url, headers=headers)\n        try:\n            with urllib.request.urlopen(req, timeout=10) as resp:\n                # 保存新 ETag\n                new_etag = resp.headers.get(\"ETag\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/case_sync.py",
       "line": 305,
       "excerpt": "        req = urllib.request.Request(url, headers=headers)\n        try:\n            with urllib.request.urlopen(req, timeout=15) as resp:\n                data = json.loads(resp.read().decode(\"utf-8\"))\n        except Exception as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/case_sync.py",
       "line": 376,
       "excerpt": "            try:\n                req = urllib.request.Request(raw_url, headers=headers)\n                with urllib.request.urlopen(req, timeout=10) as resp:\n                    content = resp.read()\n                with local_path.open(\"xb\") as output:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/config.py",
       "line": 145,
       "excerpt": "\n    req = urllib.request.Request(api_url, headers=headers)\n    with urllib.request.urlopen(req, timeout=30) as resp:\n        tree_data = json.loads(resp.read().decode(\"utf-8\"))\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/config.py",
       "line": 165,
       "excerpt": "            if github_token:\n                req.add_header(\"Authorization\", f\"Bearer {github_token}\")\n            with urllib.request.urlopen(req, timeout=15) as resp:\n                local_path.write_bytes(resp.read())\n            downloaded += 1",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/github_bot.py",
       "line": 47,
       "excerpt": "\n    try:\n        with urllib.request.urlopen(req, timeout=30) as resp:\n            return json.loads(resp.read().decode(\"utf-8\"))\n    except urllib.error.HTTPError as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/traction.py",
       "line": 129,
       "excerpt": "        request_headers.update(headers)\n    request = Request(url, headers=request_headers, method=\"GET\")\n    with urlopen(request, timeout=timeout) as response:  # noqa: S310\n        body = response.read().decode(\"utf-8\")\n    return json.loads(body)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/version_check.py",
       "line": 30,
       "excerpt": "        req = urllib.request.Request(url, headers={\"Accept\": \"application/json\"})\n        # 设置 3 秒超时，绝不阻塞启动\n        with urllib.request.urlopen(req, timeout=3) as resp:\n            data = json.loads(resp.read().decode(\"utf-8\"))\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "cyberhuatuo/version_check.py",
       "line": 63,
       "excerpt": "            url = \"https://pypi.org/pypi/cyberhuatuo/json\"\n            req = urllib.request.Request(url, headers={\"Accept\": \"application/json\"})\n            with urllib.request.urlopen(req, timeout=3) as resp:\n                data = json.loads(resp.read().decode(\"utf-8\"))\n            latest = data.get(\"info\", {}).get(\"version\", \"\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Private Key at tests/test_agent_guard.py:383; …and 14 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "64 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 92 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (4 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 92 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.KyaniteLabs/kinocut",
   "version": "1.16.1",
   "slug": "io-github-kyanitelabs-kinocut",
   "scanned_at": "2026-10-16T02:34:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/KyaniteLabs/kinocut",
   "package": "pypi:kinocut@1.16.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 670,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "kinocut/_crush_shader/render_frames.mjs",
       "line": 53,
       "excerpt": "    // Read effect GLSL sources\n    const commonGLSL = readFileSync(join(CRUSH_JS_SRC, 'common.glsl'), 'utf-8');\n    const effectGLSL = readFileSync(join(CRUSH_JS_SRC, 'effects', `${effect}.glsl`), 'utf-8');\n\n    // Create headless canvas at first frame's dimensions",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "kinocut/_crush_shader/render_frames.mjs",
       "line": 199,
       "excerpt": "\n            const outBuf = outCanvas.toBuffer('image/png');\n            writeFileSync(join(outputDir, `frame_${frameNum}.png`), outBuf);\n\n            if ((i + 1) % 30 === 0) {",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "kinocut/ai_engine/upscale.py",
       "line": 132,
       "excerpt": "        with model_download_stage(model_path) as tmp_model:\n            with (\n                urllib.request.urlopen(req, timeout=120, context=ssl_context) as resp,  # noqa: S310\n                open_staged_writer(str(tmp_model)) as fh,\n            ):",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "kinocut/font_download_worker.py",
       "line": 68,
       "excerpt": "    deadline = time.monotonic() + DEFAULT_FONT_DOWNLOAD_DEADLINE\n    total = 0\n    with urllib.request.urlopen(url, timeout=DEFAULT_FONT_DOWNLOAD_TIMEOUT) as response:  # noqa: S310 — static HTTPS allowlist\n        expected = _declared_font_size(response)\n        while True:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "kinocut/object_matte/weights.py",
       "line": 67,
       "excerpt": "    with model_download_stage(dest) as tmp_path:\n        with (\n            urllib.request.urlopen(  # noqa: S310\n                req, timeout=DEFAULT_OBJECT_MATTE_TIMEOUT, context=context\n            ) as resp,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at kinocut/ai_engine/upscale.py:35; Hex High Entropy String at kinocut/ai_engine/upscale.py:36; Hex High Entropy String at kinocut/validation.py:157; Hex High Entropy String at kinocut/validation.py:158",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "90 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 27 issue(s) in the last 6 months: 0.6 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 10 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 54,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-27p8-2357-5qqv",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-27p8-2357-5qqv",
       "finding": "@xmldom/xmldom:GHSA-27p8-2357-5qqv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-3px3-54cx-rmw9",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3px3-54cx-rmw9",
       "finding": "@xmldom/xmldom:GHSA-3px3-54cx-rmw9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-4w3w-2rp5-g8jm",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.11",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4w3w-2rp5-g8jm",
       "finding": "@xmldom/xmldom:GHSA-4w3w-2rp5-g8jm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-6mj3-qw4j-hgrw",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6mj3-qw4j-hgrw",
       "finding": "@xmldom/xmldom:GHSA-6mj3-qw4j-hgrw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-8344-3jmq-59r6",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8344-3jmq-59r6",
       "finding": "@xmldom/xmldom:GHSA-8344-3jmq-59r6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-93r5-fhx6-vmg9",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-93r5-fhx6-vmg9",
       "finding": "@xmldom/xmldom:GHSA-93r5-fhx6-vmg9",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-965w-775f-mr7g",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-965w-775f-mr7g",
       "finding": "@xmldom/xmldom:GHSA-965w-775f-mr7g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-c7q8-3ch8-vqpv",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c7q8-3ch8-vqpv",
       "finding": "@xmldom/xmldom:GHSA-c7q8-3ch8-vqpv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-g53g-w8rj-fmg7",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.11",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g53g-w8rj-fmg7",
       "finding": "@xmldom/xmldom:GHSA-g53g-w8rj-fmg7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-vr34-hp96-76pp",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vr34-hp96-76pp",
       "finding": "@xmldom/xmldom:GHSA-vr34-hp96-76pp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-w2rr-34g9-rvrj",
       "detail": "transitive, CVSS 8.7, fixed in 0.9.11",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w2rr-34g9-rvrj",
       "finding": "@xmldom/xmldom:GHSA-w2rr-34g9-rvrj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "extract-zip 2.0.1 — GHSA-jmr9-qjv8-65gv",
       "detail": "transitive, CVSS 8.6",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jmr9-qjv8-65gv",
       "finding": "extract-zip:GHSA-jmr9-qjv8-65gv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.3.1 — GHSA-c475-qrg2-pj4r",
       "detail": "transitive, CVSS 8.2, fixed in 6.2.1",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c475-qrg2-pj4r",
       "finding": "basic-ftp:GHSA-c475-qrg2-pj4r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-fx2h-pf6j-xcff",
       "detail": "transitive, CVSS 8.2, fixed in 6.4.3",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "extract-zip 2.0.1 — GHSA-7pqw-9j4j-h8q3",
       "detail": "transitive, CVSS 8.1",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7pqw-9j4j-h8q3",
       "finding": "extract-zip:GHSA-7pqw-9j4j-h8q3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 10.0.0 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 9.0.1 — GHSA-w5hq-g745-h8pq",
       "detail": "transitive, CVSS 7.5, fixed in 11.1.1",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-c27g-q93r-2cwf",
       "detail": "transitive, CVSS 7.5, fixed in 5.4.9",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c27g-q93r-2cwf",
       "finding": "vite:GHSA-c27g-q93r-2cwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-6h8r-xr42-gp59",
       "detail": "transitive, CVSS 6.9, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6h8r-xr42-gp59",
       "finding": "@xmldom/xmldom:GHSA-6h8r-xr42-gp59",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-9cwx-2883-4wfx",
       "detail": "transitive, CVSS 6.9, fixed in 4.5.4",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9cwx-2883-4wfx",
       "finding": "vite:GHSA-9cwx-2883-4wfx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-vg6x-rcgg-rjx6",
       "detail": "transitive, CVSS 6.5, fixed in 4.5.6",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vg6x-rcgg-rjx6",
       "finding": "vite:GHSA-vg6x-rcgg-rjx6",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-64vr-g452-qvp3",
       "detail": "transitive, CVSS 6.4, fixed in 4.5.4",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-64vr-g452-qvp3",
       "finding": "vite:GHSA-64vr-g452-qvp3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@xmldom/xmldom 0.9.10 — GHSA-6gmq-8vp8-gcm6",
       "detail": "transitive, CVSS 6.3, fixed in 0.9.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6gmq-8vp8-gcm6",
       "finding": "@xmldom/xmldom:GHSA-6gmq-8vp8-gcm6",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.7.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.7.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-4w7w-66w2-5vf9",
       "detail": "transitive, CVSS 6.3, fixed in 6.4.2",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4w7w-66w2-5vf9",
       "finding": "vite:GHSA-4w7w-66w2-5vf9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-356w-63v5-8wf4",
       "detail": "transitive, CVSS 6.0, fixed in 4.5.13",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-356w-63v5-8wf4",
       "finding": "vite:GHSA-356w-63v5-8wf4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-859w-5945-r5v3",
       "detail": "transitive, CVSS 6.0, fixed in 4.5.14",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-859w-5945-r5v3",
       "finding": "vite:GHSA-859w-5945-r5v3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-93m4-6634-74q7",
       "detail": "transitive, CVSS 6.0, fixed in 5.4.21",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-93m4-6634-74q7",
       "finding": "vite:GHSA-93m4-6634-74q7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-8jhw-289h-jh2g",
       "detail": "transitive, CVSS 5.9, fixed in 4.5.3",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8jhw-289h-jh2g",
       "finding": "vite:GHSA-8jhw-289h-jh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-v6wh-96g9-6wx3",
       "detail": "transitive, CVSS 5.5, fixed in 6.4.3",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v6wh-96g9-6wx3",
       "finding": "vite:GHSA-v6wh-96g9-6wx3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.18.20 — GHSA-67mh-4wv8-2f99",
       "detail": "transitive, CVSS 5.3, fixed in 0.25.0",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-67mh-4wv8-2f99",
       "finding": "esbuild:GHSA-67mh-4wv8-2f99",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-4r4m-qw57-chr8",
       "detail": "transitive, CVSS 5.3, fixed in 4.5.11",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4r4m-qw57-chr8",
       "finding": "vite:GHSA-4r4m-qw57-chr8",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-x574-m823-4x7w",
       "detail": "transitive, CVSS 5.3, fixed in 4.5.10",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x574-m823-4x7w",
       "finding": "vite:GHSA-x574-m823-4x7w",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-xcj6-pq6g-qj4x",
       "detail": "transitive, CVSS 5.3, fixed in 4.5.12",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xcj6-pq6g-qj4x",
       "finding": "vite:GHSA-xcj6-pq6g-qj4x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-g4jq-h2w9-997c",
       "detail": "transitive, CVSS 2.3, fixed in 5.4.20",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g4jq-h2w9-997c",
       "finding": "vite:GHSA-g4jq-h2w9-997c",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 4.5.2 — GHSA-jqfw-vq24-v9c3",
       "detail": "transitive, CVSS 2.3, fixed in 5.4.20",
       "path": "kinocut/revideo_template/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqfw-vq24-v9c3",
       "finding": "vite:GHSA-jqfw-vq24-v9c3",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.LeandroPG19/cuba-memorys",
   "version": "0.24.0",
   "slug": "io-github-leandropg19-cuba-memorys",
   "scanned_at": "2026-10-16T02:34:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/LeandroPG19/cuba-memorys",
   "package": "npm:cuba-memorys@0.24.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "npm/postinstall.js",
       "line": 46,
       "excerpt": "        .get(u, (res) => {\n          if (res.statusCode === 301 || res.statusCode === 302) {\n            request(res.headers.location);\n            return;\n          }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "npm/postinstall.js",
       "line": 72,
       "excerpt": "        .on(\"error\", fail);\n    };\n    request(url);\n  });\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 11 credential-shaped string(s), every one from a keyword or entropy heuristic (Basic Auth Credentials, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at CHANGELOG.md:499; Basic Auth Credentials at README.md:55; Basic Auth Credentials at packaging/cuba-memorys.service:90; Basic Auth Credentials at scripts/backup-db.sh:8; Basic Auth Credentials at scripts/demo.sh:64; Secret Keyword at scripts/gen-eval-dataset.py:41; Basic Auth Credentials at scripts/mcp_live_session_test.py:30; Basic Auth Credentials at scripts/merge-gate.sh:35; Basic Auth Credentials at scripts/restore-db.sh:12; Basic Auth Credentials at scripts/run-all-tests.sh:7; …and 1 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Lukie-81/reporelay",
   "version": "1.2.5",
   "slug": "io-github-lukie-81-reporelay",
   "scanned_at": "2026-10-16T02:34:46+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Lukie-81/RepoRelay",
   "package": "npm:reporelay-mcp@1.2.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.4",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "network transport, and no authentication middleware, credential-header read, or inbound token verification appears anywhere in the source we fetched — `03` §4's \"no authentication; HTTP transport\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "transport is streamable-http but the entry declares no endpoint URL to read a scheme from",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 10 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at dist/audit.js:159; Hex High Entropy String at dist/tunnel-client-install.js:26; Hex High Entropy String at dist/tunnel-client-install.js:32; Hex High Entropy String at dist/tunnel-client-install.js:38; Hex High Entropy String at dist/tunnel-client-install.js:44; Hex High Entropy String at dist/tunnel-client-install.js:50; Hex High Entropy String at dist/tunnel-client-install.js:56; Secret Keyword at dist/tunnel-client-install.js:203; Secret Keyword at docs/chatgpt-web.md:137; Secret Keyword at docs/chatgpt-web.md:143",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 74,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 46 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 4 issue(s) in the last 6 months: 8.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by tags), last release 61 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.MarkNicholls/fsopenxmldsl-mcp",
   "version": "0.6.4",
   "slug": "io-github-marknicholls-fsopenxmldsl-mcp",
   "scanned_at": "2026-10-16T02:34:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Kookerella-Ltd/Kookerella.FsOpenXmlDsl",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "ee37d28e5cb454a5887a7e5a8eca38f10c4bfe1c",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 5 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:569; Secret Keyword at tests/Kookerella.FsOpenXmlDsl.Tests/Examples/SheetProtectionWithPassword/workbook.json:12; Secret Keyword at tests/Kookerella.FsOpenXmlDsl.Tests/Examples/SheetProtectionWithPassword/workbook.xml:9; Secret Keyword at tests/Kookerella.FsOpenXmlDsl.Tests/Examples/WorkbookProtection/workbook.json:14; Secret Keyword at tests/Kookerella.FsOpenXmlDsl.Tests/Examples/WorkbookProtection/workbook.xml:11",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 30 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 30 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.MayankTalwar0/startup-finance-metrics",
   "version": "1.1.2",
   "slug": "io-github-mayanktalwar0-startup-finance-metrics",
   "scanned_at": "2026-10-16T02:34:52+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/MayankTalwar0/startup-finance-metrics",
   "package": "pypi:startup-finance-mcp@1.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 168 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Mike25app/scaleforge-mcp-meta-ads",
   "version": "0.2.3",
   "slug": "io-github-mike25app-scaleforge-mcp-meta-ads",
   "scanned_at": "2026-10-16T02:34:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Mike25app/scaleforge-mcp-meta-ads",
   "package": "npm:@getscaleforge/mcp-meta-ads@0.2.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "0fe715ee7cd04f3e636ce70b847c121885ffe915",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 17,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 152,
       "excerpt": "  const url = `${META_API_BASE}${normalizePath(path)}?${qs.toString()}`;\n\n  const res = await fetch(url, { method: \"GET\" });\n  if (!res.ok) {\n    const text = await res.text().catch(() => \"\");",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 176,
       "excerpt": "  const url = `${META_API_BASE}${normalizePath(path)}`;\n\n  const res = await fetch(url, {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 199,
       "excerpt": "  const url = `${META_API_BASE}${normalizePath(path)}?${qs.toString()}`;\n\n  const res = await fetch(url, { method: \"DELETE\" });\n  if (!res.ok) {\n    const text = await res.text().catch(() => \"\");",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 174 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 34,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.MohamedAbdallah-14/prompt-to-asset",
   "version": "0.4.2",
   "slug": "io-github-mohamedabdallah-14-prompt-to-asset",
   "scanned_at": "2026-10-16T02:34:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/MohamedAbdallah-14/prompt-to-asset",
   "package": "npm:prompt-to-asset@0.4.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "7f5676a8fe4f220a647a4ec7e17d155f7976fa0b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 113,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 78,
     "reason": "scored on the declared repository at version 0.4.2, because the published package carries its code only as build output, which is not read as the server's own source; 6 findings in test code are listed but not deducted; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/pipeline/matte.ts",
       "line": 67,
       "excerpt": "  if (rmbgUrl && (mode === \"auto\" || mode === \"rmbg\" || mode === \"birefnet\")) {\n    try {\n      const resp = await fetch(rmbgUrl, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/octet-stream\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/pipeline/upscale.ts",
       "line": 46,
       "excerpt": "  if (upscalerUrl && mode !== \"lanczos\") {\n    try {\n      const resp = await fetch(upscalerUrl, {\n        method: \"POST\",\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/pipeline/validate.ts",
       "line": 725,
       "excerpt": "  if (!url) return { ran: false };\n  try {\n    const resp = await fetch(url, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/pipeline/validate.ts",
       "line": 790,
       "excerpt": "  if (!url) return { ran: false };\n  try {\n    const resp = await fetch(url, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/pipeline/vectorize.ts",
       "line": 57,
       "excerpt": "  if ((mode === \"recraft\" || mode === \"auto\") && recraftUrl) {\n    try {\n      const resp = await fetch(recraftUrl, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/octet-stream\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/bfl.ts",
       "line": 61,
       "excerpt": "\n    const endpoint = bflEndpoint(modelId);\n    const resp = await fetch(endpoint, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/bfl.ts",
       "line": 83,
       "excerpt": "    for (let i = 0; i < 60; i++) {\n      await new Promise((r) => setTimeout(r, 1500));\n      const p = await fetch(pollUrl, { headers: { \"x-key\": CONFIG.apiKeys.flux } });\n      const pj = (await p.json()) as { status?: string; result?: { sample?: string } };\n      if (pj.status === \"Ready\" && pj.result?.sample) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/bfl.ts",
       "line": 95,
       "excerpt": "    if (!imageUrl) throw new ProviderError(\"bfl\", modelId, \"timed out waiting for result\");\n\n    const imgResp = await fetch(imageUrl);\n    const image = Buffer.from(await imgResp.arrayBuffer());\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/cloudflare.ts",
       "line": 82,
       "excerpt": "    )}/ai/run/${cfModel}`;\n\n    const resp = await fetch(url, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/comfyui.ts",
       "line": 64,
       "excerpt": "    let resp: Response;\n    try {\n      resp = await fetch(url, {\n        method: \"POST\",\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/fal.ts",
       "line": 57,
       "excerpt": "    }\n\n    const resp = await fetch(endpoint, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/fal.ts",
       "line": 75,
       "excerpt": "    if (!imageUrl) throw new ProviderError(\"fal\", modelId, \"no image URL in response\");\n\n    const imgResp = await fetch(imageUrl);\n    const image = Buffer.from(await imgResp.arrayBuffer());\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/google.ts",
       "line": 86,
       "excerpt": "    };\n\n    const resp = await fetch(url, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/ideogram.ts",
       "line": 84,
       "excerpt": "      throw new ProviderError(\"ideogram\", modelId, \"no image URL in response\");\n    }\n    const imgResp = await fetch(imageUrl);\n    const image = Buffer.from(await imgResp.arrayBuffer());\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/leonardo.ts",
       "line": 107,
       "excerpt": "    if (!imageUrl) throw new ProviderError(\"leonardo\", modelId, \"timed out waiting for result\");\n\n    const imgResp = await fetch(imageUrl);\n    const image = Buffer.from(await imgResp.arrayBuffer());\n    return {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/pollinations.ts",
       "line": 84,
       "excerpt": "    }\n\n    const resp = await fetch(url.toString(), { headers });\n    if (!resp.ok) {\n      const errText = await resp.text().catch(() => \"\");",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/recraft.ts",
       "line": 78,
       "excerpt": "      image = Buffer.from(first.b64_json, \"base64\");\n    } else if (first?.url) {\n      const r = await fetch(first.url);\n      image = Buffer.from(await r.arrayBuffer());\n    } else {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/replicate.ts",
       "line": 81,
       "excerpt": "    const body = ref.version ? { version: ref.version, input } : { input };\n\n    const createResp = await fetch(url, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/replicate.ts",
       "line": 114,
       "excerpt": "      if (!pollUrl) break;\n      await new Promise((r) => setTimeout(r, 2000));\n      const poll = await fetch(pollUrl, {\n        headers: { Authorization: `Bearer ${CONFIG.apiKeys.replicate}` }\n      });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/replicate.ts",
       "line": 134,
       "excerpt": "    }\n\n    const imgResp = await fetch(imgUrl);\n    const image = Buffer.from(await imgResp.arrayBuffer());\n    return {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/stability.ts",
       "line": 54,
       "excerpt": "    if (modelId === \"sd3-large\") form.set(\"model\", \"sd3-large\");\n\n    const resp = await fetch(endpoint, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/providers/stable-horde.ts",
       "line": 118,
       "excerpt": "      image = Buffer.from(b64, \"base64\");\n    } else {\n      const imgResp = await fetch(imageUrl);\n      image = Buffer.from(await imgResp.arrayBuffer());\n    }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/tools/train-brand-lora.ts",
       "line": 87,
       "excerpt": "  let resp: Response;\n  try {\n    resp = await fetch(url, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/mcp-server/src/modes.test.ts",
       "line": 114,
       "excerpt": "  afterEach(() => {\n    for (const k of KEYS) {\n      if (snapshot[k] !== undefined) process.env[k] = snapshot[k];\n      else delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/mcp-server/src/tools/capabilities.test.ts",
       "line": 34,
       "excerpt": "  afterEach(() => {\n    for (const k of KEYS) {\n      if (snapshot[k] !== undefined) process.env[k] = snapshot[k];\n      else delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/mcp-server/src/tools/doctor.test.ts",
       "line": 34,
       "excerpt": "  afterEach(() => {\n    for (const k of KEYS) {\n      if (snapshot[k] !== undefined) process.env[k] = snapshot[k];\n      else delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/mcp-server/src/tools/enhance-prompt.test.ts",
       "line": 24,
       "excerpt": "  afterEach(() => {\n    for (const k of KEYS) {\n      if (snapshot[k] !== undefined) process.env[k] = snapshot[k];\n      else delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/mcp-server/src/tools/models.test.ts",
       "line": 16,
       "excerpt": "  afterEach(() => {\n    for (const k of KEYS) {\n      if (snapshot[k] !== undefined) process.env[k] = snapshot[k];\n      else delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/mcp-server/src/tools/soft-fallback.test.ts",
       "line": 23,
       "excerpt": "    for (const k of keysToSnapshot) {\n      if (envBackup[k] === undefined) delete process.env[k];\n      else process.env[k] = envBackup[k];\n    }\n  });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 57,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 87 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 3 issue(s) in the last 6 months: 152.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 173 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 68,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Ninjabeam20/sportiq-mcp",
   "version": "0.3.2",
   "slug": "io-github-ninjabeam20-sportiq-mcp",
   "scanned_at": "2026-10-16T02:35:04+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Ninjabeam20/SportIQ-MCP",
   "package": "pypi:sportiq-mcp@0.3.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 90,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://sportiq.utkarshgupta.org/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:144; Secret Keyword at README.md:98",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 97,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 6 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 0.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 6 days (by tags), last release 44 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.QAtlasHub/doiget",
   "version": "0.9.0",
   "slug": "io-github-qatlashub-doiget",
   "scanned_at": "2026-10-16T02:35:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/QAtlasHub/doiget",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "ec4c5e977222cee26b060f7bd8480e3ca655898b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 9 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at Formula/doiget.rb:21; Hex High Entropy String at Formula/doiget.rb:25; Hex High Entropy String at Formula/doiget.rb:32; Secret Keyword at crates/doiget-core/src/credentials.rs:512; Hex High Entropy String at crates/doiget-core/src/sources/doaj.rs:224; Hex High Entropy String at docs/PROVENANCE_LOG.md:37; Secret Keyword at docs/SECURITY.md:76; Hex High Entropy String at site/content/developer/provenance-log.md:43; Secret Keyword at site/content/developer/security.md:82",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 17 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 0 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 15 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "5 vulnerabilities were found and none could be placed in `03` §6's table — no CVSS score, or an ecosystem whose manifest we cannot parse for direct-vs-transitive",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0346",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 4.0, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0346",
       "finding": "rustls:RUSTSEC-2026-0346",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0348",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0348",
       "finding": "rustls:RUSTSEC-2026-0348",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0349",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0349",
       "finding": "rustls:RUSTSEC-2026-0349",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0347",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 2.3, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0347",
       "finding": "rustls:RUSTSEC-2026-0347",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "paste 1.0.15 — RUSTSEC-2024-0436",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2024-0436",
       "finding": "paste:RUSTSEC-2024-0436",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 73,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "docs/SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.RudrenduPaul/agenticworkspace",
   "version": "0.1.4",
   "slug": "io-github-rudrendupaul-agenticworkspace",
   "scanned_at": "2026-10-16T02:35:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/RudrenduPaul/AgenticWorkspace",
   "package": "pypi:agenticworkspace-cli@0.1.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 39,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/agenticworkspace/scaffold/handoff_generator.py",
       "line": 116,
       "excerpt": "def read_handoff_file(workspace_dir: str, file_name: str) -> str:\n    \"\"\"Re-exported for tests that need to assert directory contents directly.\"\"\"\n    with open(os.path.join(handoff_dir(workspace_dir), file_name), \"r\", encoding=\"utf-8\") as handle:\n        return handle.read()",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "1 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 21 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 21 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.RyanKramer/rankedtoday-mcp",
   "version": "0.1.0",
   "slug": "io-github-ryankramer-rankedtoday-mcp",
   "scanned_at": "2026-10-16T02:35:16+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/RyanKramer/rankedtoday-mcp",
   "package": "pypi:rankedtoday-mcp@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "8 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 50 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.RyanKramer/summitflow-mcp",
   "version": "0.1.0",
   "slug": "io-github-ryankramer-summitflow-mcp",
   "scanned_at": "2026-10-16T02:35:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/RyanKramer/summitflow-mcp",
   "package": "pypi:summitflow-mcp@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "9 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 50 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.SPAZIO-GENESI/attest-mcp",
   "version": "0.4.1",
   "slug": "io-github-spazio-genesi-attest-mcp",
   "scanned_at": "2026-10-16T02:35:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/SPAZIO-GENESI/attest-mcp",
   "package": "npm:@spazio-genesi/attest-mcp@0.4.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 7,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at test/hash.test.js:15; Hex High Entropy String at test/hash.test.js:21",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "7 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 10 days (by releases), last release 65 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Servosity/wordpress-mcp",
   "version": "0.1.6",
   "slug": "io-github-servosity-wordpress-mcp",
   "scanned_at": "2026-10-16T02:35:22+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/servosity/msp-skills",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "f560db55959fd21e5b47490c550f2fcfd0045aec",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 135,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 86,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "cli/internal/cli/deliver.go",
       "line": 164,
       "excerpt": "\t_ = compact\n\tcontentType := \"application/json\"\n\treq, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"building webhook request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "cli/internal/cli/feedback.go",
       "line": 79,
       "excerpt": "\t\treturn err\n\t}\n\treq, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"building feedback request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "cli/internal/cli/media_upload.go",
       "line": 182,
       "excerpt": "// header WordPress requires to name the upload.\nfunc mediaDoUpload(ctx context.Context, timeout time.Duration, base, auth, filename, contentType string, data []byte) (json.RawMessage, int, error) {\n\treq, err := http.NewRequestWithContext(ctx, http.MethodPost, base+\"/media\", bytes.NewReader(data))\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"creating request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "cli/internal/cli/media_upload.go",
       "line": 208,
       "excerpt": "\t\treturn nil, 0, err\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(b))\n\tif err != nil {\n\t\treturn nil, 0, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "cli/internal/client/client.go",
       "line": 1209,
       "excerpt": "\t\t}\n\n\t\treq, err := http.NewRequestWithContext(ctx, method, targetURL, bodyReader)\n\t\tif err != nil {\n\t\t\treturn nil, 0, fmt.Errorf(\"creating request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "cli/internal/cliutil/probe.go",
       "line": 75,
       "excerpt": "\t\tclient = &http.Client{Timeout: defaultProbeTimeout}\n\t}\n\treq, reqErr := http.NewRequestWithContext(ctx, \"GET\", url, nil)\n\tif reqErr != nil {\n\t\treturn ReachabilityUnreachable, 0, fmt.Errorf(\"building request: %w\", reqErr)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "cli/internal/learn/derive.go",
       "line": 330,
       "excerpt": "\t\t\tcontinue\n\t\t}\n\t\tdata, err := os.ReadFile(filepath.Join(dir, seg.name)) // #nosec G304 -- listed from state dir\n\t\tif err != nil {\n\t\t\tcontinue",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "cli/internal/learn/journal.go",
       "line": 410,
       "excerpt": "\t\t\tcontinue\n\t\t}\n\t\tdata, err := os.ReadFile(filepath.Join(dir, s.name)) // #nosec G304 -- listed from state dir\n\t\tif err != nil {\n\t\t\tif os.IsNotExist(err) {",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 7 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at cli/internal/cli/doctor.go:592; Secret Keyword at cli/internal/cli/platform_cli_test.go:427; Secret Keyword at cli/internal/config/config.go:516; Secret Keyword at cli/internal/config/config.go:660; Secret Keyword at cli/internal/config/config.go:809; Secret Keyword at cli/internal/config/config_perms_test.go:30; Hex High Entropy String at cli/internal/platform/testdata/receipt-status-golden.json:2",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 1 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 50 issue(s) in the last 6 months: 59.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 1 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "1 vulnerability was found and none could be placed in `03` §6's table — no CVSS score, or an ecosystem whose manifest we cannot parse for direct-vs-transitive",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "golang.org/x/text 0.39.0 — GO-2026-6629",
       "detail": "transitive, no CVSS published, fixed in 0.41.0",
       "path": "cli/go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6629",
       "finding": "golang.org/x/text:GO-2026-6629",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "cli/LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.SunFlash12/forge-cascade-mcp",
   "version": "0.1.7",
   "slug": "io-github-sunflash12-forge-cascade-mcp",
   "scanned_at": "2026-10-16T02:35:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/SunFlash12/forge-cascade-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "23ad35c1f1a150d3a36fb5a49a777799276fea91",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 87,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential enforcement present in source but not documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://forgecascade.org/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "3 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 114 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 66.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 138 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Techmatic-sys/indiamart-mcp-server",
   "version": "1.1.0",
   "slug": "io-github-techmatic-sys-indiamart-mcp-server",
   "scanned_at": "2026-10-16T02:35:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Techmatic-sys/indiamart-mcp-server",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "unknown",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "d124c394288d1b559905f606405fba8e305aeb5a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 43,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "saas/frontend/sw.js",
       "line": 151,
       "excerpt": "    if (cached) return cached;\n    try {\n        const response = await fetch(request);\n        if (response.ok) {\n            const cache = await caches.open(STATIC_CACHE);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "saas/frontend/sw.js",
       "line": 164,
       "excerpt": "async function networkFirstApi(request) {\n    try {\n        const response = await fetch(request);\n        if (response.ok) {\n            const cache = await caches.open(API_CACHE);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "saas/frontend/sw.js",
       "line": 182,
       "excerpt": "async function networkFirstPage(request) {\n    try {\n        return await fetch(request);\n    } catch (e) {\n        const cached = await caches.match(request);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 43,
     "reason": "",
     "assessed_weight": "0.35",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "the registry entry declares no transport for any package or remote",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Twilio API Key at saas/.env.example:36; …and 10 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "10 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 193 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 24.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source: requirements.txt does not pin every requirement to one exact version, so dependency versions are unresolved and no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Thefirstmannnn/tack",
   "version": "0.1.0",
   "slug": "io-github-thefirstmannnn-tack",
   "scanned_at": "2026-10-16T02:35:39+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Thefirstmannnn/tack",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "5ad98dafdd3069c411876524df6a7e1083ac57e0",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 21,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential enforcement present in source but not documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://YOUR_DOMAIN/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at src/test-helpers.ts:19; Secret Keyword at src/test-helpers.ts:19",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 24 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Vortiago/mcp-tekna",
   "version": "0.3.1",
   "slug": "io-github-vortiago-mcp-tekna",
   "scanned_at": "2026-10-16T02:35:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Vortiago/mcp-tekna",
   "package": "pypi:mcp-tekna@0.3.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 10,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "a dotenv-style secrets file is loaded and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 52,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 206 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 206 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-36",
       "detail": "transitive, CVSS 9.8, fixed in 46.0.7",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3481",
       "detail": "direct, CVSS 7.6, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3481",
       "finding": "mcp:PYSEC-2026-3481",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3483",
       "detail": "direct, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3482",
       "detail": "direct, CVSS 7.1, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3482",
       "finding": "mcp:PYSEC-2026-3482",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-3553",
       "detail": "transitive, CVSS 8.7, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.2.0 — PYSEC-2026-4013",
       "detail": "transitive, CVSS 7.8, fixed in 21.7.13",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4013",
       "finding": "virtualenv:PYSEC-2026-4013",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.2.0 — PYSEC-2026-4011",
       "detail": "transitive, CVSS 7.7, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4011",
       "finding": "virtualenv:PYSEC-2026-4011",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — GHSA-537c-gmf6-5ccf",
       "detail": "transitive, CVSS 7.5, fixed in 48.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-537c-gmf6-5ccf",
       "finding": "cryptography:GHSA-537c-gmf6-5ccf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3036",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3036",
       "finding": "python-multipart:PYSEC-2026-3036",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3039",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.27",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3039",
       "finding": "python-multipart:PYSEC-2026-3039",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "soupsieve 2.8.3 — PYSEC-2026-3071",
       "detail": "transitive, CVSS 7.5, fixed in 2.8.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3071",
       "finding": "soupsieve:PYSEC-2026-3071",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "soupsieve 2.8.3 — PYSEC-2026-3072",
       "detail": "transitive, CVSS 7.5, fixed in 2.8.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3072",
       "finding": "soupsieve:PYSEC-2026-3072",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-2281",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2281",
       "finding": "starlette:PYSEC-2026-2281",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-249",
       "detail": "transitive, CVSS 7.5, fixed in 1.3.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-249",
       "finding": "starlette:PYSEC-2026-249",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-179",
       "detail": "transitive, CVSS 7.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-179",
       "finding": "pyjwt:PYSEC-2026-179",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.2.0 — PYSEC-2026-4014",
       "detail": "transitive, CVSS 7.3, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4014",
       "finding": "virtualenv:PYSEC-2026-4014",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-3554",
       "detail": "transitive, CVSS 6.9, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3554",
       "finding": "cryptography:PYSEC-2026-3554",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "idna 3.11 — PYSEC-2026-215",
       "detail": "transitive, CVSS 6.9, fixed in 3.15",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-215",
       "finding": "idna:PYSEC-2026-215",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pytest 9.0.2 — PYSEC-2026-1845",
       "detail": "transitive, CVSS 6.8, fixed in 9.0.3",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1845",
       "finding": "pytest:PYSEC-2026-1845",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-161",
       "detail": "transitive, CVSS 6.5, fixed in 1.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-161",
       "finding": "starlette:PYSEC-2026-161",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.2.0 — PYSEC-2026-4012",
       "detail": "transitive, CVSS 5.8, fixed in 21.7.11",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4012",
       "finding": "virtualenv:PYSEC-2026-4012",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — GHSA-jq35-7prp-9v3f",
       "detail": "transitive, CVSS 5.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jq35-7prp-9v3f",
       "finding": "pyjwt:GHSA-jq35-7prp-9v3f",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-35",
       "detail": "transitive, CVSS 5.3, fixed in 46.0.6",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-35",
       "finding": "cryptography:PYSEC-2026-35",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pydantic-settings 2.13.1 — GHSA-4xgf-cpjx-pc3j",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xgf-cpjx-pc3j",
       "finding": "pydantic-settings:GHSA-4xgf-cpjx-pc3j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-178",
       "detail": "transitive, CVSS 5.3, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-178",
       "finding": "pyjwt:PYSEC-2026-178",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3038",
       "detail": "transitive, CVSS 5.3, fixed in 0.0.26",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3038",
       "finding": "python-multipart:PYSEC-2026-3038",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "soupsieve 2.8.3 — PYSEC-2026-4170",
       "detail": "transitive, CVSS 5.3, fixed in 2.9.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4170",
       "finding": "soupsieve:PYSEC-2026-4170",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "soupsieve 2.8.3 — PYSEC-2026-4171",
       "detail": "transitive, CVSS 5.3, fixed in 2.9.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4171",
       "finding": "soupsieve:PYSEC-2026-4171",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-2280",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2280",
       "finding": "starlette:PYSEC-2026-2280",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-248",
       "detail": "transitive, CVSS 5.3, fixed in 1.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-248",
       "finding": "starlette:PYSEC-2026-248",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-175",
       "detail": "transitive, CVSS 4.2, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-175",
       "finding": "pyjwt:PYSEC-2026-175",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-177",
       "detail": "transitive, CVSS 3.7, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-177",
       "finding": "pyjwt:PYSEC-2026-177",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3037",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3037",
       "finding": "python-multipart:PYSEC-2026-3037",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3040",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.31",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3040",
       "finding": "python-multipart:PYSEC-2026-3040",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3041",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3041",
       "finding": "python-multipart:PYSEC-2026-3041",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pygments 2.19.2 — PYSEC-2026-2987",
       "detail": "transitive, CVSS 3.3, fixed in 2.20.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2987",
       "finding": "pygments:PYSEC-2026-2987",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Whitemarmot/copyright01",
   "version": "1.0.0",
   "slug": "io-github-whitemarmot-copyright01",
   "scanned_at": "2026-10-16T02:35:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Whitemarmot/copyright01-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "106929bdf46730f45ff2912c389b5164fa7e0636",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.copyright01.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 217 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.Z333Q/p402",
   "version": "1.0.0",
   "slug": "io-github-z333q-p402",
   "scanned_at": "2026-10-16T02:35:49+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/Z333Q/p402-protocol",
   "package": "npm:@p402/mcp-server@1.0.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "94c8cc991bc06bfd448377ec19b1f520f3b613e5",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 36,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 88,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/mcp-server/src/index.ts",
       "line": 208,
       "excerpt": "        ? `${ROUTER_URL}/api/v2/providers/compare?task_type=${encodeURIComponent(task_type)}`\n        : `${ROUTER_URL}/api/v2/providers`;\n      const res = await fetch(url, {\n        headers: { Authorization: `Bearer ${API_KEY}` },\n      });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/sdk/src/index.ts",
       "line": 536,
       "excerpt": "            : `${this.routerUrl}/api/v2/governance/mandates`;\n\n        const res = await fetch(url, { headers: this.headers() });\n\n        if (!res.ok) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/sdk/src/meter.ts",
       "line": 66,
       "excerpt": "        this.headers   = deps.headers;\n        this.log       = deps.log;\n        this.fetcher   = deps.fetcher ?? ((url, init) => fetch(url, init));\n    }\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/sdk/src/outcomes.ts",
       "line": 35,
       "excerpt": "        this.headers   = deps.headers;\n        this.log       = deps.log;\n        this.fetcher   = deps.fetcher ?? ((url, init) => fetch(url, init));\n    }\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:22",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 134 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 81.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 9 days (by tags), last release 165 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ZentricProtocol/zentric-protocol-mcp",
   "version": "0.1.3",
   "slug": "io-github-zentricprotocol-zentric-protocol-mcp",
   "scanned_at": "2026-10-16T02:35:54+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ZentricProtocol/zentricprotocol",
   "package": "npm:zentric-protocol-mcp@0.1.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:49",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 67,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 129 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.adriancisnerosspeed-hub/civic-library-mcp",
   "version": "0.1.1",
   "slug": "io-github-adriancisnerosspeed-hub-civic-library-mcp",
   "scanned_at": "2026-10-16T02:35:56+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/adriancisnerosspeed-hub/civic-library-mcp",
   "package": "npm:civic-library-mcp@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "d5032844b95edcb2c98a6e2c94a99a7af2d01850",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 13,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "scored on the declared repository at version 0.1.1, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/tools/demographics.ts",
       "line": 93,
       "excerpt": "            const below = num(acs[POVERTY_BELOW]);\n            const universe = num(acs[POVERTY_UNIVERSE]);\n            out[f] = below != null && universe ? Math.round((below / universe) * 10000) / 10000 : null;\n          } else {\n            out[f] = num(acs[SINGLE_VARS[f]]);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/tools/demographics.ts",
       "line": 95,
       "excerpt": "            out[f] = below != null && universe ? Math.round((below / universe) * 10000) / 10000 : null;\n          } else {\n            out[f] = num(acs[SINGLE_VARS[f]]);\n          }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/http.ts",
       "line": 20,
       "excerpt": "  const timer = setTimeout(() => controller.abort(), timeoutMs);\n  try {\n    const res = await fetch(url, {\n      signal: controller.signal,\n      headers: { \"User-Agent\": \"civic-library-mcp\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:38",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 122 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by tags), last release 122 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.alex-on-ai/webreaper",
   "version": "11.3.2",
   "slug": "io-github-alex-on-ai-webreaper",
   "scanned_at": "2026-10-16T02:36:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/alex-on-ai/WebReaper",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "063d76383b31dff08def780fa9e51ffc5734073a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 58,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 71,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "website/components/mdx-content.tsx",
       "line": 14,
       "excerpt": "// so the component identity is stable across re-renders (no remount/state loss).\nfunction compileMDX(code: string) {\n  const fn = new Function(code);\n  return fn({ ...runtime }).default as ComponentType<{\n    components?: MDXComponentMap;",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "website/app/api/playground/scrape/route.ts",
       "line": 44,
       "excerpt": "  let upstream: Response;\n  try {\n    upstream = await fetch(upstreamUrl, {\n      headers: backendHeaders(),\n      // Propagate client disconnect so the backend stops scraping when the",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "website/app/api/playground/tier-b/scrape/route.ts",
       "line": 60,
       "excerpt": "  let upstream: Response;\n  try {\n    upstream = await fetch(upstreamUrl, {\n      headers: backendHeaders(),\n      // Propagate client disconnect so the backend kills the browser when the",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 707 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Basic Auth Credentials, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at Examples/BrownsfashionScraper/Worker.cs:43; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:52; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:55; Hex High Entropy String at Examples/BrownsfashionScraper/Worker.cs:56; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:58; Hex High Entropy String at Examples/BrownsfashionScraper/Worker.cs:61; Hex High Entropy String at Examples/BrownsfashionScraper/Worker.cs:62; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:67; Base64 High Entropy String at Examples/BrownsfashionScraper/Worker.cs:69; Base64 High Entropy String at Examples/WebReaper.DistributedScraperWorkerService/ScrapingWorker.cs:52; …and 697 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 77,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 12 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 50.8 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 110 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "1 vulnerability could not be placed in `03` §6's table and is listed but not scored",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 2,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "next 16.2.6 — GHSA-2xp9-vwfh-vxw4",
       "detail": "direct, CVSS 9.5, fixed in 16.3.3",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2xp9-vwfh-vxw4",
       "finding": "next:GHSA-2xp9-vwfh-vxw4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-vcvr-r3jv-pc5j",
       "detail": "direct, CVSS 9.5, fixed in 16.3.6",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vcvr-r3jv-pc5j",
       "finding": "next:GHSA-vcvr-r3jv-pc5j",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-p293-qw3h-jr36",
       "detail": "direct, CVSS 9.0, fixed in 16.3.3",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p293-qw3h-jr36",
       "finding": "next:GHSA-p293-qw3h-jr36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-6gpp-xcg3-4w24",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6gpp-xcg3-4w24",
       "finding": "next:GHSA-6gpp-xcg3-4w24",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-89xv-2m56-2m9x",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-89xv-2m56-2m9x",
       "finding": "next:GHSA-89xv-2m56-2m9x",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-cjq9-62q9-8jv4",
       "detail": "direct, CVSS 8.3, fixed in 16.3.8",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cjq9-62q9-8jv4",
       "finding": "next:GHSA-cjq9-62q9-8jv4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-p9j2-gv94-2wf4",
       "detail": "direct, CVSS 8.3, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p9j2-gv94-2wf4",
       "finding": "next:GHSA-p9j2-gv94-2wf4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-m99w-x7hq-7vfj",
       "detail": "direct, CVSS 8.2, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m99w-x7hq-7vfj",
       "finding": "next:GHSA-m99w-x7hq-7vfj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "deepmerge-ts 7.1.5 — GHSA-ggr8-5vv4-36mx",
       "detail": "transitive, CVSS 8.2, fixed in 8.0.0",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ggr8-5vv4-36mx",
       "finding": "deepmerge-ts:GHSA-ggr8-5vv4-36mx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.12 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.12 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.15 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 5.0.7",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.15 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.15 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.8",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.15 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.15 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.9",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.0",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-6g55-p6wh-862q",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.12",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6g55-p6wh-862q",
       "finding": "postcss:GHSA-6g55-p6wh-862q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-r28c-9q8g-f849",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.18",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.15 — GHSA-r28c-9q8g-f849",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.18",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "transitive, CVSS 7.0, fixed in 0.35.0",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-4633-3j49-mh5q",
       "detail": "direct, CVSS 6.3, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4633-3j49-mh5q",
       "finding": "next:GHSA-4633-3j49-mh5q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-4c39-4ccg-62r3",
       "detail": "direct, CVSS 6.3, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c39-4ccg-62r3",
       "finding": "next:GHSA-4c39-4ccg-62r3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-4jqv-mc3x-m676",
       "detail": "direct, CVSS 6.3, fixed in 16.3.8",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4jqv-mc3x-m676",
       "finding": "next:GHSA-4jqv-mc3x-m676",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-955p-x3mx-jcvp",
       "detail": "direct, CVSS 6.3, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-955p-x3mx-jcvp",
       "finding": "next:GHSA-955p-x3mx-jcvp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-f87g-xv8r-7p7x",
       "detail": "direct, CVSS 6.3, fixed in 16.3.8",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f87g-xv8r-7p7x",
       "finding": "next:GHSA-f87g-xv8r-7p7x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-mcj8-r9mp-w47p",
       "detail": "direct, CVSS 6.3, fixed in 16.3.8",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mcj8-r9mp-w47p",
       "finding": "next:GHSA-mcj8-r9mp-w47p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-q8wf-6r8g-63ch",
       "detail": "direct, CVSS 6.3, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8wf-6r8g-63ch",
       "finding": "next:GHSA-q8wf-6r8g-63ch",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-68g3-v927-f742",
       "detail": "direct, CVSS 6.0, fixed in 16.2.11",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68g3-v927-f742",
       "finding": "next:GHSA-68g3-v927-f742",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.2.6 — GHSA-39w2-rjm5-chcv",
       "detail": "direct, CVSS 5.4, fixed in 16.3.8",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-39w2-rjm5-chcv",
       "finding": "next:GHSA-39w2-rjm5-chcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "baseline-browser-mapping 2.10.32 — GHSA-w5vr-8v7q-w6rv",
       "detail": "transitive, CVSS 6.6, fixed in 2.11.0",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5vr-8v7q-w6rv",
       "finding": "baseline-browser-mapping:GHSA-w5vr-8v7q-w6rv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-fxqj-rqcc-2cmp",
       "detail": "transitive, CVSS 6.3, fixed in 8.5.23",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp",
       "finding": "postcss:GHSA-fxqj-rqcc-2cmp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.15 — GHSA-fxqj-rqcc-2cmp",
       "detail": "transitive, CVSS 6.3, fixed in 8.5.23",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp",
       "finding": "postcss:GHSA-fxqj-rqcc-2cmp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.4.31 — GHSA-qx2v-qp2m-jg93",
       "detail": "transitive, CVSS 6.1, fixed in 8.5.10",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qx2v-qp2m-jg93",
       "finding": "postcss:GHSA-qx2v-qp2m-jg93",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss-selector-parser 6.0.10 — GHSA-rj75-hqrm-r3gf",
       "detail": "transitive, CVSS 5.9, fixed in 7.1.6",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rj75-hqrm-r3gf",
       "finding": "postcss-selector-parser:GHSA-rj75-hqrm-r3gf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.15 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.21",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.6 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 5.0.12",
       "path": "website/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 51,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE.txt present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.aliengineering-byte/resilireplay",
   "version": "0.7.1",
   "slug": "io-github-aliengineering-byte-resilireplay",
   "scanned_at": "2026-10-16T02:36:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/aliengineering-byte/resilireplay",
   "package": "npm:resilireplay@0.7.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at dist/resilireplay.js:30355",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 42 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (9 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 42 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.andrewschristison/pondlog-ebird",
   "version": "0.1.6-1",
   "slug": "io-github-andrewschristison-pondlog-ebird",
   "scanned_at": "2026-10-16T02:36:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/andrewschristison/pondlog",
   "package": "npm:@pondlog/mcp-ebird@0.1.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "0a2aecbf28fd65bc70753d63e9e1a63fb4506ad4",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 124,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 80,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/cli/src/cache.ts",
       "line": 67,
       "excerpt": "  const keys = Object.keys(value as Record<string, unknown>).sort();\n  for (const k of keys) {\n    out[k] = canonicalize((value as Record<string, unknown>)[k]);\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/core/src/noaa.ts",
       "line": 82,
       "excerpt": "        const timer = setTimeout(() => ac.abort(), params.timeoutMs ?? 30_000);\n        try {\n          const r = await fetch(url, {\n            headers: {\n              accept: \"application/json\",",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/source-ebird/src/client.ts",
       "line": 100,
       "excerpt": "      async () => {\n        await limiter.acquire();\n        const res = await fetch(url, {\n          method: \"GET\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/source-inaturalist/src/client.ts",
       "line": 55,
       "excerpt": "      async () => {\n        await limiter.acquire();\n        const res = await fetch(url, {\n          method: \"GET\",\n          headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/source-mushroomobserver/src/client.ts",
       "line": 86,
       "excerpt": "          : ctrl.signal;\n        try {\n          const res = await fetch(url, {\n            method: \"GET\",\n            headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/source-npn/src/client.ts",
       "line": 103,
       "excerpt": "          : ctrl.signal;\n        try {\n          const res = await fetch(url, {\n            method: \"GET\",\n            headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/source-trefle/src/client.ts",
       "line": 128,
       "excerpt": "          : ctrl.signal;\n        try {\n          const res = await fetch(url, {\n            method: \"GET\",\n            headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/source-usgs/src/client.ts",
       "line": 81,
       "excerpt": "          : ctrl.signal;\n        try {\n          const res = await fetch(url, {\n            method: \"GET\",\n            headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "packages/source-usgs/src/client.ts",
       "line": 144,
       "excerpt": "          : ctrl.signal;\n        try {\n          const res = await fetch(url, {\n            method: \"GET\",\n            headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/api/nature-proxy.js",
       "line": 56,
       "excerpt": "\n  const recentUrl = `https://api.ebird.org/v2/data/obs/geo/recent?lat=${lat}&lng=${lng}&dist=25&back=7`;\n  const recent = await fetch(recentUrl, { headers }).then((r) => r.ok ? r.json() : []);\n  const speciesSet = new Set(recent.map((o) => o.speciesCode));\n  const notableUrl = `https://api.ebird.org/v2/data/obs/geo/recent/notable?lat=${lat}&lng=${lng}&dist=25`;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/api/nature-proxy.js",
       "line": 59,
       "excerpt": "  const speciesSet = new Set(recent.map((o) => o.speciesCode));\n  const notableUrl = `https://api.ebird.org/v2/data/obs/geo/recent/notable?lat=${lat}&lng=${lng}&dist=25`;\n  const notable = await fetch(notableUrl, { headers }).then((r) => r.ok ? r.json() : []).catch(() => []);\n  const hotspotUrl = `https://api.ebird.org/v2/ref/hotspot/geo?lat=${lat}&lng=${lng}&dist=25&fmt=json`;\n  const hotspots = await fetch(hotspotUrl, { headers }).then((r) => r.ok ? r.json() : []).catch(() => []);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/api/nature-proxy.js",
       "line": 61,
       "excerpt": "  const notable = await fetch(notableUrl, { headers }).then((r) => r.ok ? r.json() : []).catch(() => []);\n  const hotspotUrl = `https://api.ebird.org/v2/ref/hotspot/geo?lat=${lat}&lng=${lng}&dist=25&fmt=json`;\n  const hotspots = await fetch(hotspotUrl, { headers }).then((r) => r.ok ? r.json() : []).catch(() => []);\n\n  return {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/api/nature-proxy.js",
       "line": 82,
       "excerpt": "    + `&east=${b.east.toFixed(4)}&west=${b.west.toFixed(4)}`\n    + `&date=${isoDay(start)}-${isoDay(today)}&format=json&detail=low`;\n  const r = await fetch(url, { headers: { Accept: 'application/json' } });\n  if (!r.ok) throw new Error(`MO ${r.status}`);\n  const data = await r.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/api/nature-proxy.js",
       "line": 130,
       "excerpt": "    const stationsUrl = `https://services.usanpn.org/npn_portal/stations/getStationsByLocation.json`\n      + `?wkt=${encodeURIComponent(wkt)}&request_src=pondlog`;\n    const sr = await fetch(stationsUrl, { signal: ctrl.signal });\n    if (!sr.ok) return { activeEvents: [] };\n    const stationsRaw = await sr.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/api/nature-proxy.js",
       "line": 153,
       "excerpt": "    top.forEach((s, i) => { obsParams.push(`station_ids%5B${i}%5D=${s.station_id}`); });\n    const obsUrl = `https://services.usanpn.org/npn_portal/observations/getObservations.json?${obsParams.join('&')}`;\n    const or = await fetch(obsUrl, { signal: ctrl.signal });\n    if (!or.ok) return { activeEvents: [] };\n    const obsRaw = await or.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/script.js",
       "line": 154,
       "excerpt": "        + `?lat=${lat}&lng=${lng}&radius=25`\n        + `&d1=${fmt(d1)}&d2=${fmt(d2)}&per_page=1`;\n      const r = await fetch(url, { signal: a.signal, headers: { Accept: 'application/json' } });\n      a.cancel();\n      if (!r.ok) throw new Error(`status ${r.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/script.js",
       "line": 176,
       "excerpt": "        + `&datum=MLLW&time_zone=lst_ldt&units=english`\n        + `&interval=hilo&application=pondlog&format=json`;\n      const r = await fetch(url, { signal: a.signal, headers: { Accept: 'application/json' } });\n      a.cancel();\n      if (!r.ok) throw new Error(`status ${r.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/script.js",
       "line": 202,
       "excerpt": "      const url = `https://waterservices.usgs.gov/nwis/iv/`\n        + `?sites=${siteId}&parameterCd=00060&format=json`;\n      const r = await fetch(url, { signal: a.signal, headers: { Accept: 'application/json' } });\n      a.cancel();\n      if (!r.ok) throw new Error(`status ${r.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/script.js",
       "line": 264,
       "excerpt": "    try {\n      const url = `/api/nature-proxy?source=${source}&lat=${lat}&lng=${lng}`;\n      const r = await fetch(url, { signal: a.signal, headers: { Accept: 'application/json' } });\n      a.cancel();\n      if (!r.ok) return null;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 64,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 7 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 87.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by tags), last release 101 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.angelo-leone/talent-augmenting-layer",
   "version": "1.0.0",
   "slug": "io-github-angelo-leone-talent-augmenting-layer",
   "scanned_at": "2026-10-16T02:36:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/angelo-leone/talent-augmenting-layer",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://proworker-hosted.onrender.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/angelo-leone/talent-augmenting-layer) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.artgas1/yandex-direct-api-mcp",
   "version": "1.1.1",
   "slug": "io-github-artgas1-yandex-direct-api-mcp",
   "scanned_at": "2026-10-16T02:36:19+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/artgas1/yandex-direct-mcp",
   "package": "npm:yandex-direct-api-mcp@1.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "086ec4527333c93608a9fe6ddcb3aa3544b23981",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 24,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/http.ts",
       "line": 223,
       "excerpt": "    const timer = setTimeout(() => controller.abort(), timeoutMs);\n    try {\n      const res = await fetch(url, {\n        method: 'POST',\n        headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "tools/fetch-spec.mjs",
       "line": 58,
       "excerpt": "\nasync function get(url, { binary = false } = {}) {\n  const res = await fetch(url, { headers: { 'User-Agent': UA } });\n  if (!res.ok) throw new Error(`HTTP ${res.status} на ${url}`);\n  return binary ? Buffer.from(await res.arrayBuffer()) : res.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 37 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 39,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ashev87/propstack-mcp",
   "version": "1.1.0",
   "slug": "io-github-ashev87-propstack-mcp",
   "scanned_at": "2026-10-16T02:36:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ashev87/propstack-mcp",
   "package": "npm:propstack-mcp-server@1.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "14e8f6ca403d2bda849e746b54166aa43547a9d5",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 17,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository at version 1.1.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/propstack-client.ts",
       "line": 100,
       "excerpt": "        // Fresh timeout signal per attempt — a timeout aborts only this try,\n        // leaving retries (network errors and timeouts both fall through here).\n        res = await fetch(url, { ...init, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS) });\n      } catch (err) {\n        lastError = err instanceof Error ? err : new Error(String(err));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:40",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 32,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 107 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 104.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.astuto-ai/onelens-mcp",
   "version": "0.1.0",
   "slug": "io-github-astuto-ai-onelens-mcp",
   "scanned_at": "2026-10-16T02:36:28+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/astuto-ai/mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.onelens.cloud/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/astuto-ai/mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.axiosdevs/agentscoin-mcp",
   "version": "1.1.0",
   "slug": "io-github-axiosdevs-agentscoin-mcp",
   "scanned_at": "2026-10-16T02:36:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/axiosdevs/agentscoin-mcp",
   "package": "npm:agentscoin-mcp@1.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "8 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.bakyang2/kr-crypto-intelligence",
   "version": "1.6.0",
   "slug": "io-github-bakyang2-kr-crypto-intelligence",
   "scanned_at": "2026-10-16T02:36:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/bakyang2/kr-crypto-intelligence",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "43acdbab9d360cc18819dfe0b84401b3348c4a20",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 13,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "krw_macro.py",
       "line": 77,
       "excerpt": "           f\"&observation_start={start_yyyymmdd[:4]}-{start_yyyymmdd[4:6]}-{start_yyyymmdd[6:]}\"\n           f\"&observation_end={end_yyyymmdd[:4]}-{end_yyyymmdd[4:6]}-{end_yyyymmdd[6:]}\")\n    with urllib.request.urlopen(url, timeout=15) as r:\n        d = json.loads(r.read())\n    rows = [(pd.Timestamp(o[\"date\"]), float(o[\"value\"]))",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "krw_macro.py",
       "line": 88,
       "excerpt": "           f\"&requestType=1&startTime={start_yyyymmdd}&endTime={end_yyyymmdd}&timeframe=day\")\n    req = urllib.request.Request(url, headers={\"User-Agent\": \"Mozilla/5.0\"})\n    with urllib.request.urlopen(req, timeout=15) as r:\n        raw = r.read().decode(errors=\"replace\")\n    txt = raw.replace(\"'\", '\"')",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.printmoneylab.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 7 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at main.py:849; Base64 High Entropy String at main.py:863; Base64 High Entropy String at main.py:1934; Hex High Entropy String at main.py:2123; Base64 High Entropy String at mcp_server.py:318; Base64 High Entropy String at x402watch_feed.py:56; Base64 High Entropy String at x402watch_feed.py:186",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "18 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 62,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 73 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 4 issue(s) in the last 6 months: 42.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 24,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.bodyegypt/turkey-data-mcp",
   "version": "1.0.0",
   "slug": "io-github-bodyegypt-turkey-data-mcp",
   "scanned_at": "2026-10-16T02:36:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/bodyegypt/turkey-data-mcp",
   "package": "npm:turkey-data-mcp@1.0.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "ff516cb0cbaca36a1ad92d24b927a5b83507cfaa",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 71,
       "excerpt": "  let response: Response;\n  try {\n    response = await fetch(url, {\n      headers: { \"User-Agent\": USER_AGENT, Accept: \"application/json\" },\n      signal: AbortSignal.timeout(25_000),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 129 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.brain-bbqs/neuro",
   "version": "1.0.0",
   "slug": "io-github-brain-bbqs-neuro",
   "scanned_at": "2026-10-16T02:36:40+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/brain-bbqs/NeuroMCP",
   "package": "npm:@brain-bbqs/neuro-mcp@1.0.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 16,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "14 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.byenzyme/enzyme",
   "version": "0.12.2",
   "slug": "io-github-byenzyme-enzyme",
   "scanned_at": "2026-10-16T02:36:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/byenzyme/enzyme",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "f7adff9b3963c4103b69e758ed2a7e5fa441617d",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at server.json:16; Hex High Entropy String at server.json:30; Hex High Entropy String at server.json:44; Hex High Entropy String at server.json:58",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "3 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 9 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 6 issue(s) in the last 6 months: 0.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 9 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 28,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "openclaw/package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.bytedance/mcp-server-search",
   "version": "1.0.0",
   "slug": "io-github-bytedance-mcp-server-search",
   "scanned_at": "2026-10-16T02:36:57+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/bytedance/UI-TARS-desktop",
   "package": "npm:@agent-infra/mcp-server-search@latest",
   "source_state": "unreachable",
   "source_subject": "package",
   "source_reason": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": null,
     "reason": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "transport is streamable-http but the entry declares no endpoint URL to read a scheme from",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 81,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 7 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 48 issue(s) in the last 6 months: 22.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 8 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "4 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the package this server declares (npm:@agent-infra/mcp-server-search@latest) could not be fetched from its registry, so its source could not be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.cejor6/kalshi-mcp-server",
   "version": "0.1.8",
   "slug": "io-github-cejor6-kalshi-mcp-server",
   "scanned_at": "2026-10-16T02:36:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/cejor6/kalshi-mcp-server",
   "package": "pypi:kalshi-mcp-server@0.1.8",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 20,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 76,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Private Key at .env.example:20; …and 2 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "27 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (10 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 95 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 11,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 48.0.0 — PYSEC-2026-3553",
       "detail": "direct, CVSS 8.7, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 48.0.0 — PYSEC-2026-3552",
       "detail": "direct, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 48.0.0 — GHSA-537c-gmf6-5ccf",
       "detail": "direct, CVSS 7.5, fixed in 48.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-537c-gmf6-5ccf",
       "finding": "cryptography:GHSA-537c-gmf6-5ccf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4177",
       "detail": "transitive, CVSS 8.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4177",
       "finding": "urllib3:PYSEC-2026-4177",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.4.1 — PYSEC-2026-4013",
       "detail": "transitive, CVSS 7.8, fixed in 21.7.13",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4013",
       "finding": "virtualenv:PYSEC-2026-4013",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.4.1 — PYSEC-2026-4011",
       "detail": "transitive, CVSS 7.7, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4011",
       "finding": "virtualenv:PYSEC-2026-4011",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.27.2 — PYSEC-2026-3483",
       "detail": "transitive, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4175",
       "detail": "transitive, CVSS 7.6, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4175",
       "finding": "urllib3:PYSEC-2026-4175",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.27.2 — GHSA-84m7-p3x7-pcfv",
       "detail": "transitive, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.29 — PYSEC-2026-3036",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3036",
       "finding": "python-multipart:PYSEC-2026-3036",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.2.1 — PYSEC-2026-249",
       "detail": "transitive, CVSS 7.5, fixed in 1.3.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-249",
       "finding": "starlette:PYSEC-2026-249",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4143",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4143",
       "finding": "pyjwt:PYSEC-2026-4143",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4150",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4150",
       "finding": "pyjwt:PYSEC-2026-4150",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4151",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4151",
       "finding": "pyjwt:PYSEC-2026-4151",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.4.1 — PYSEC-2026-4014",
       "detail": "transitive, CVSS 7.3, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4014",
       "finding": "virtualenv:PYSEC-2026-4014",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 48.0.0 — PYSEC-2026-3554",
       "detail": "direct, CVSS 6.9, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3554",
       "finding": "cryptography:PYSEC-2026-3554",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4176",
       "detail": "transitive, CVSS 6.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4176",
       "finding": "urllib3:PYSEC-2026-4176",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.4.1 — PYSEC-2026-4012",
       "detail": "transitive, CVSS 5.8, fixed in 21.7.11",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4012",
       "finding": "virtualenv:PYSEC-2026-4012",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pydantic-settings 2.14.1 — GHSA-4xgf-cpjx-pc3j",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xgf-cpjx-pc3j",
       "finding": "pydantic-settings:GHSA-4xgf-cpjx-pc3j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4142",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4142",
       "finding": "pyjwt:PYSEC-2026-4142",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.2.1 — PYSEC-2026-248",
       "detail": "transitive, CVSS 5.3, fixed in 1.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-248",
       "finding": "starlette:PYSEC-2026-248",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.29 — PYSEC-2026-3037",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3037",
       "finding": "python-multipart:PYSEC-2026-3037",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.29 — PYSEC-2026-3040",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.31",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3040",
       "finding": "python-multipart:PYSEC-2026-3040",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.29 — PYSEC-2026-3041",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3041",
       "finding": "python-multipart:PYSEC-2026-3041",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.chrischall/alphaportal-mcp",
   "version": "1.2.3",
   "slug": "io-github-chrischall-alphaportal-mcp",
   "scanned_at": "2026-10-16T02:37:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/chrischall/alphaportal-mcp",
   "package": "npm:alphaportal-mcp@1.2.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "dbf12bca81e13d975bd866925ea4119d4e34b476",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 14,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository at version 1.2.3, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 73,
       "excerpt": " * this bug is invisible in local dev and only bites a user on an older host.)\n */\nconst defaultFetch: FetchLike = (input, init) => fetch(input as string | URL | Request, init);\n\nexport interface AlphaPortalClientOptions {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at dist/bundle.js:23536; Secret Keyword at dist/bundle.js:70714; Secret Keyword at dist/session.js:23",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (5 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 7 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 31,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.chrischall/tripadvisor-mcp",
   "version": "1.1.9",
   "slug": "io-github-chrischall-tripadvisor-mcp",
   "scanned_at": "2026-10-16T02:37:09+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/chrischall/tripadvisor-mcp",
   "package": "npm:@chrischall/tripadvisor-mcp@1.1.9",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "42eafcaeb4ece769c0c265b9d4650dee1e4a4e4e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 15,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 1.1.9, because the published package carries its code only as build output, which is not read as the server's own source; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:17; Secret Keyword at dist/bundle.js:63443; Secret Keyword at skills/tripadvisor/SKILL.md:26",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 6 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (18 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 6 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.codeChap/google-analytics",
   "version": "0.1.0",
   "slug": "io-github-codechap-google-analytics",
   "scanned_at": "2026-10-16T02:37:17+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/codeChap/mcp-server-google-analytics",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "unknown",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "b003d8ade81adc672fd338bc50a0d5287e10d890",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.2",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "the registry entry declares no transport for any package or remote",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (GOOGLE_APPLICATION_CREDENTIALS), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 51 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "23 vulnerabilities were found and none could be placed in `03` §6's table — no CVSS score, or an ecosystem whose manifest we cannot parse for direct-vs-transitive",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "openssl 0.10.75 — GHSA-xp3w-r5p5-63rr",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.10.79",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xp3w-r5p5-63rr",
       "finding": "openssl:GHSA-xp3w-r5p5-63rr",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.75 — GHSA-hppc-g8h3-xhp3",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.3, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hppc-g8h3-xhp3",
       "finding": "openssl:GHSA-hppc-g8h3-xhp3",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.8.0 — GHSA-33f5-2c5q-wgwj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.2, fixed in 2.0.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-33f5-2c5q-wgwj",
       "finding": "rmcp:GHSA-33f5-2c5q-wgwj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.75 — GHSA-ghm9-cr32-g9qj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.1, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ghm9-cr32-g9qj",
       "finding": "openssl:GHSA-ghm9-cr32-g9qj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.8.0 — GHSA-9pj6-vhgr-3mwh",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 2.0.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9pj6-vhgr-3mwh",
       "finding": "rmcp:GHSA-9pj6-vhgr-3mwh",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.9 — RUSTSEC-2026-0104",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.103.13",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0104",
       "finding": "rustls-webpki:RUSTSEC-2026-0104",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.75 — GHSA-8c75-8mhr-p7r9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8c75-8mhr-p7r9",
       "finding": "openssl:GHSA-8c75-8mhr-p7r9",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.75 — GHSA-pqf5-4pqq-29f5",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pqf5-4pqq-29f5",
       "finding": "openssl:GHSA-pqf5-4pqq-29f5",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.8.0 — GHSA-9g45-5xwm-f3wc",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 6.8, fixed in 2.1.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9g45-5xwm-f3wc",
       "finding": "rmcp:GHSA-9g45-5xwm-f3wc",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rmcp 1.8.0 — GHSA-c9xm-49cp-xcr9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 6.3, fixed in 2.0.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c9xm-49cp-xcr9",
       "finding": "rmcp:GHSA-c9xm-49cp-xcr9",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "jsonwebtoken 9.3.1 — GHSA-h395-gr6q-cpjc",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.5, fixed in 10.3.0",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h395-gr6q-cpjc",
       "finding": "jsonwebtoken:GHSA-h395-gr6q-cpjc",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.37 — RUSTSEC-2026-0285",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.3, fixed in 0.23.45",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0285",
       "finding": "rustls:RUSTSEC-2026-0285",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.75 — GHSA-phqj-4mhp-q6mq",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.1, fixed in 0.10.80",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-phqj-4mhp-q6mq",
       "finding": "openssl:GHSA-phqj-4mhp-q6mq",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.75 — GHSA-xv59-967r-8726",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 5.1, fixed in 0.10.79",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xv59-967r-8726",
       "finding": "openssl:GHSA-xv59-967r-8726",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.9 — RUSTSEC-2026-0049",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 4.4, fixed in 0.103.10",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0049",
       "finding": "rustls-webpki:RUSTSEC-2026-0049",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.37 — RUSTSEC-2026-0346",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 4.0, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0346",
       "finding": "rustls:RUSTSEC-2026-0346",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.37 — RUSTSEC-2026-0348",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0348",
       "finding": "rustls:RUSTSEC-2026-0348",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls 0.23.37 — RUSTSEC-2026-0349",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0349",
       "finding": "rustls:RUSTSEC-2026-0349",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.9 — RUSTSEC-2026-0098",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 2.2, fixed in 0.103.12",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0098",
       "finding": "rustls-webpki:RUSTSEC-2026-0098",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.9 — RUSTSEC-2026-0099",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 2.2, fixed in 0.103.12",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0099",
       "finding": "rustls-webpki:RUSTSEC-2026-0099",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.75 — GHSA-xmgf-hq76-4vx2",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 1.7, fixed in 0.10.78",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xmgf-hq76-4vx2",
       "finding": "openssl:GHSA-xmgf-hq76-4vx2",
       "severity": "low",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "anyhow 1.0.102 — RUSTSEC-2026-0190",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 1.0.103",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0190",
       "finding": "anyhow:RUSTSEC-2026-0190",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "h2 0.4.13 — RUSTSEC-2026-0258",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.4.16",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0258",
       "finding": "h2:RUSTSEC-2026-0258",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.codespar/mcp-celcoin",
   "version": "0.2.4",
   "slug": "io-github-codespar-mcp-celcoin",
   "scanned_at": "2026-10-16T02:37:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/codespar/mcp-dev-latam",
   "package": "npm:@codespar/mcp-celcoin@0.2.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:22; Secret Keyword at src/__tests__/index.test.ts:21",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "18 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 64,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 19 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 6 issue(s) in the last 6 months: 93.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 41,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.cwhited26/pocket-agent-mcp",
   "version": "0.1.1",
   "slug": "io-github-cwhited26-pocket-agent-mcp",
   "scanned_at": "2026-10-16T02:37:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/cwhited26/pocket-agent-mcp",
   "package": "npm:@pocket-agent/mcp-server@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "697277b664c2c9ae8a2f8b417e03310bde499e93",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 9,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/proxy.ts",
       "line": 40,
       "excerpt": "  let res: Response;\n  try {\n    res = await fetch(endpoint, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://aipocketagent.com/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 80 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 44,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.cyanheads/libofcongress-mcp-server",
   "version": "0.5.1",
   "slug": "io-github-cyanheads-libofcongress-mcp-server",
   "scanned_at": "2026-10-16T02:37:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/cyanheads/libofcongress-mcp-server",
   "package": "npm:@cyanheads/libofcongress-mcp-server@0.5.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "4169bbbba827b981eec5af077730a0a98493517f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 40,
   "files_pruned": 4,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 88,
     "reason": "scored on the declared repository at version 0.5.1, because the published package carries its code only as build output, which is not read as the server's own source; 4 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/mcp-server/tools/definitions/libofcongress-search-newspapers.tool.ts",
       "line": 221,
       "excerpt": "        );\n      }\n      bounds[field] = parsed.bound;\n    }\n    const range = resolveDateRange(bounds.date_start, bounds.date_end);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": "2026-10-15",
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/lc-linked-data/lc-linked-data-service.ts",
       "line": 113,
       "excerpt": "    const data = await retryWithinBudget(\n      async ({ signal }) => {\n        const response = await fetch(url, {\n          headers: { 'User-Agent': this.userAgent, Accept: 'application/json' },\n          signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": "2026-10-15",
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/loc-api/loc-api-service.ts",
       "line": 503,
       "excerpt": "    this.checkRateLimit();\n    ctx.log.debug('LOC API request', { url });\n    const response = await fetch(url, {\n      headers: { 'User-Agent': this.userAgent, Accept: 'application/json' },\n      signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": "2026-10-15",
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/loc-api/loc-api-service.ts",
       "line": 963,
       "excerpt": "      const ocr = await retryWithinBudget(\n        async ({ signal }) => {\n          const response = await fetch(textUrl, {\n            headers: { 'User-Agent': this.userAgent },\n            signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": "2026-10-15",
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 61,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "network transport, and no authentication middleware, credential-header read, or inbound token verification appears anywhere in the source we fetched — `03` §4's \"no authentication; HTTP transport\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://libofcongress.caseyjhand.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 0 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.daedalus/mcp-server-find",
   "version": "0.1.1",
   "slug": "io-github-daedalus-mcp-server-find",
   "scanned_at": "2026-10-16T02:37:33+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/daedalus/mcp-server-find",
   "package": "pypi:mcp-server-find@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 11,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "1 file could not be parsed and was not scanned",
     "assessed_weight": "0.90",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/mcp_server_find/sync.py",
       "line": 601,
       "excerpt": "    if updates:\n        values.append(existing_id)\n        conn.execute(f\"UPDATE servers SET {', '.join(updates)} WHERE id = ?\", values)\n        conn.commit()\n",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 94,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (GITHUB_TOKEN), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 173 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 4 days (by releases), last release 173 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.danielsousaoliveira/cal-auto-python",
   "version": "0.1.0",
   "slug": "io-github-danielsousaoliveira-cal-auto-python",
   "scanned_at": "2026-10-16T02:37:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/danielsousaoliveira/auto-calendar-python",
   "package": "pypi:cal-auto-python@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 23,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at tests/test_mcp_server.py:544",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "8 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 36 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (2 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by tags), last release 36 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.daredoole/audio-calibration-mcp",
   "version": "0.2.0-beta.1",
   "slug": "io-github-daredoole-audio-calibration-mcp",
   "scanned_at": "2026-10-16T02:37:38+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/daredoole/audio-calibration-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "02a7ce118b6510ca9bb129c7112ad09d57711155",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 29,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "lib/listening-spatial.mjs",
       "line": 22,
       "excerpt": "  for (const systemId of systems) {\n    const rows = responses.filter(response => response.systemId === systemId), scores = rows.map(row => Number(row.score)).filter(Number.isFinite);\n    bySystem[systemId] = { observations: scores.length, mean: mean(scores), standardDeviation: Math.sqrt(variance(scores)), confidenceInterval95: scores.length ? [mean(scores) - 1.96 * Math.sqrt(variance(scores) / scores.length), mean(scores) + 1.96 * Math.sqrt(variance(scores) / scores.length)] : null };\n  }\n  const screening = responses.filter(response => typeof response.correct === \"boolean\"), successes = screening.filter(response => response.correct).length;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "lib/measurement-science.mjs",
       "line": 152,
       "excerpt": "  if (!Array.isArray(metrics) || metrics.length < 2) throw new Error(\"At least two positions are required\");\n  const fields = [\"clarityC50Db\", \"clarityC80Db\", \"definitionD50Percent\", \"centerTimeMs\"], summary = {};\n  for (const field of fields) { const values = metrics.map(item => finite(item[field], field)); summary[field] = { mean: mean(values), standardDeviation: Math.sqrt(variance(values)), minimum: Math.min(...values), maximum: Math.max(...values) }; }\n  return { positions: metrics.length, spatialVariance: summary, claimLevel: \"ISO-3382-aligned screening\" };\n}",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/rew-state.mjs",
       "line": 4,
       "excerpt": "const paths = [\"/measure/commands\", \"/measure/command\", \"/measure/status\", \"/measure/timing/reference\", \"/measure/sequential-channels\", \"/measure/sweep/repetitions\", \"/measure/sweep/configuration\", \"/measure/level\", \"/measure/protection-options\", \"/application/blocking\"];\nconst state = {};\nfor (const path of paths) { try { state[path] = await rew(path); } catch (error) { state[path] = { error: error.message }; } }\nconsole.log(JSON.stringify(state, null, 2));",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/rew-state.mjs",
       "line": 4,
       "excerpt": "const paths = [\"/measure/commands\", \"/measure/command\", \"/measure/status\", \"/measure/timing/reference\", \"/measure/sequential-channels\", \"/measure/sweep/repetitions\", \"/measure/sweep/configuration\", \"/measure/level\", \"/measure/protection-options\", \"/application/blocking\"];\nconst state = {};\nfor (const path of paths) { try { state[path] = await rew(path); } catch (error) { state[path] = { error: error.message }; } }\nconsole.log(JSON.stringify(state, null, 2));",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "server.mjs",
       "line": 92,
       "excerpt": "  for (const name of [\"profiles\", \"sessions\", \"measurements\", \"backups\", \"reports\", \"filters\", \"support\", \"datasets\"]) {\n    const dir = join(root, name); await mkdir(dir, { recursive: true });\n    groups[name] = (await readdir(dir, { withFileTypes: true })).filter(x => x.isFile()).map(x => x.name).slice(0, 200);\n  }\n  return ok({ root, groups });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 8 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at dist/cli.cjs:14482; Base64 High Entropy String at dist/server.mjs:27829; Hex High Entropy String at fixtures/reference/catalog.json:34; Hex High Entropy String at fixtures/reference/catalog.json:64; Hex High Entropy String at fixtures/reference/catalog.json:93; Hex High Entropy String at fixtures/reference/catalog.json:125; Hex High Entropy String at fixtures/reference/manifest.json:7; Hex High Entropy String at server.json:15",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "104 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 28 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 49 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 47,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.30.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.6 — GHSA-58mr-gqgx-xq4g",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-58mr-gqgx-xq4g",
       "finding": "fast-uri:GHSA-58mr-gqgx-xq4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.6 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-2vr4-cq9g-pvrc",
       "detail": "transitive, CVSS 6.9, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2vr4-cq9g-pvrc",
       "finding": "ip-address:GHSA-2vr4-cq9g-pvrc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.13.4 — GHSA-gqvv-2mrq-wpjv",
       "detail": "transitive, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.13.4 — GHSA-crvj-82cr-hjcx",
       "detail": "transitive, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 5.0.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.13.4 — GHSA-g6gw-c38x-mqfc",
       "detail": "transitive, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.6 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.13.4 — GHSA-hxh3-vqpv-xpqv",
       "detail": "transitive, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 65,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.dawitlabs/capsule",
   "version": "0.3.3",
   "slug": "io-github-dawitlabs-capsule",
   "scanned_at": "2026-10-16T02:37:45+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dawitlabs/capsule",
   "package": "npm:capsulectx@0.3.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 105 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by tags), last release 105 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.digitalgremlin/hn-developer-sentiment-mcp",
   "version": "0.1.0",
   "slug": "io-github-digitalgremlin-hn-developer-sentiment-mcp",
   "scanned_at": "2026-10-16T02:37:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/digitalgremlin/hn-developer-sentiment-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "69553533d2cb1e145b4535b37e13e87268e35cce",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 21,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://joeslade--hn-developer-sentiment-mcp.apify.actor/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 85 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 13,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 22,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-cache-semantics 4.2.0 — GHSA-ch52-4w7c-c8xp",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ch52-4w7c-c8xp",
       "finding": "http-cache-semantics:GHSA-ch52-4w7c-c8xp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-x97p-jq2g-jp4f",
       "detail": "transitive, CVSS 8.3, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x97p-jq2g-jp4f",
       "finding": "axios:GHSA-x97p-jq2g-jp4f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-542g-h47m-68v8",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-542g-h47m-68v8",
       "finding": "axios:GHSA-542g-h47m-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-c29m-xwm3-cm6r",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c29m-xwm3-cm6r",
       "finding": "axios:GHSA-c29m-xwm3-cm6r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-mghh-pgcx-3jjj",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mghh-pgcx-3jjj",
       "finding": "axios:GHSA-mghh-pgcx-3jjj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.3.1 — GHSA-c475-qrg2-pj4r",
       "detail": "transitive, CVSS 8.2, fixed in 6.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c475-qrg2-pj4r",
       "finding": "basic-ftp:GHSA-c475-qrg2-pj4r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.12 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.12 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.1 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 2.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-m8m8-qj5v-23w3",
       "detail": "transitive, CVSS 7.6, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m8m8-qj5v-23w3",
       "finding": "axios:GHSA-m8m8-qj5v-23w3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.17 — GHSA-7q85-xj36-vmfc",
       "detail": "transitive, CVSS 7.5, fixed in 0.6.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7q85-xj36-vmfc",
       "finding": "adm-zip:GHSA-7q85-xj36-vmfc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.17 — GHSA-8238-w5pm-2374",
       "detail": "transitive, CVSS 7.5, fixed in 0.6.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8238-w5pm-2374",
       "finding": "adm-zip:GHSA-8238-w5pm-2374",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.17 — GHSA-rcw4-f5rp-g42v",
       "detail": "transitive, CVSS 7.5, fixed in 0.6.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rcw4-f5rp-g42v",
       "finding": "adm-zip:GHSA-rcw4-f5rp-g42v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.17 — GHSA-xcpc-8h2w-3j85",
       "detail": "transitive, CVSS 7.5, fixed in 0.6.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xcpc-8h2w-3j85",
       "finding": "adm-zip:GHSA-xcpc-8h2w-3j85",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.1 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.1 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.1 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 2.1.1 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 2.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.2 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.2 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.15 — GHSA-r28c-9q8g-f849",
       "detail": "transitive, CVSS 7.5, fixed in 8.5.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.17 — GHSA-j5f4-cc29-5x44",
       "detail": "transitive, CVSS 7.1, fixed in 0.6.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j5f4-cc29-5x44",
       "finding": "adm-zip:GHSA-j5f4-cc29-5x44",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-3pq3-5fj3-cg6v",
       "detail": "transitive, CVSS 7.0, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3pq3-5fj3-cg6v",
       "finding": "axios:GHSA-3pq3-5fj3-cg6v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-r4gj-5m52-g5wh",
       "detail": "transitive, CVSS 7.0, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r4gj-5m52-g5wh",
       "finding": "axios:GHSA-r4gj-5m52-g5wh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 4.1.9 — GHSA-82fw-gwwq-j7x9",
       "detail": "direct, CVSS 5.9, fixed in 4.1.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "vitest:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-44g4-m2mj-wpvx",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-44g4-m2mj-wpvx",
       "finding": "axios:GHSA-44g4-m2mj-wpvx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-4hqw-qxg8-jxx2",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4hqw-qxg8-jxx2",
       "finding": "axios:GHSA-4hqw-qxg8-jxx2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-9fr6-4gfg-395g",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9fr6-4gfg-395g",
       "finding": "axios:GHSA-9fr6-4gfg-395g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-j8rh-479h-cp32",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j8rh-479h-cp32",
       "finding": "axios:GHSA-j8rh-479h-cp32",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.18.0 — GHSA-vh66-26gq-q6x8",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vh66-26gq-q6x8",
       "finding": "axios:GHSA-vh66-26gq-q6x8",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-22jq-vg5j-6vgg",
       "detail": "transitive, CVSS 6.9, fixed in 10.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-22jq-vg5j-6vgg",
       "finding": "ip-address:GHSA-22jq-vg5j-6vgg",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-2vr4-cq9g-pvrc",
       "detail": "transitive, CVSS 6.9, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2vr4-cq9g-pvrc",
       "finding": "ip-address:GHSA-2vr4-cq9g-pvrc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-4xrf-jv44-h6hh",
       "detail": "transitive, CVSS 6.9, fixed in 10.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xrf-jv44-h6hh",
       "finding": "ip-address:GHSA-4xrf-jv44-h6hh",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "adm-zip 0.5.17 — GHSA-vwc7-r8mq-g2x9",
       "detail": "transitive, CVSS 6.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vwc7-r8mq-g2x9",
       "finding": "adm-zip:GHSA-vwc7-r8mq-g2x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "baseline-browser-mapping 2.10.38 — GHSA-w5vr-8v7q-w6rv",
       "detail": "transitive, CVSS 6.6, fixed in 2.11.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5vr-8v7q-w6rv",
       "finding": "baseline-browser-mapping:GHSA-w5vr-8v7q-w6rv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.25 — GHSA-gqvv-2mrq-wpjv",
       "detail": "transitive, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.25 — GHSA-hvrm-45r6-mjfj",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.27",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hvrm-45r6-mjfj",
       "finding": "hono:GHSA-hvrm-45r6-mjfj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.2.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'AGPL-3.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.dockersamples/mcp-docker-release-information",
   "version": "0.3.0",
   "slug": "io-github-dockersamples-mcp-docker-release-information",
   "scanned_at": "2026-10-16T02:37:53+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dockersamples/mcp-docker-release-information",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "42644818e7f83a795b3d42ed67ad119eb4465c64",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 21,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 206 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release in 401 days (by releases) — over a year",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 28,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.17.5 — GHSA-8r9q-7v3j-jr4g",
       "detail": "direct, CVSS 8.7, fixed in 1.25.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8r9q-7v3j-jr4g",
       "finding": "@modelcontextprotocol/sdk:GHSA-8r9q-7v3j-jr4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.17.5 — GHSA-w48q-cv73-mx4w",
       "detail": "direct, CVSS 7.6, fixed in 1.24.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w48q-cv73-mx4w",
       "finding": "@modelcontextprotocol/sdk:GHSA-w48q-cv73-mx4w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.17.5 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.17.5 — GHSA-345p-7cg4-v4c7",
       "detail": "direct, CVSS 7.1, fixed in 1.26.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-345p-7cg4-v4c7",
       "finding": "@modelcontextprotocol/sdk:GHSA-345p-7cg4-v4c7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-3ppc-4f35-3m26",
       "detail": "transitive, CVSS 8.7, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3ppc-4f35-3m26",
       "finding": "minimatch:GHSA-3ppc-4f35-3m26",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-23c5-xmqv-rm74",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-23c5-xmqv-rm74",
       "finding": "minimatch:GHSA-23c5-xmqv-rm74",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-7r86-cg39-jmmj",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7r86-cg39-jmmj",
       "finding": "minimatch:GHSA-7r86-cg39-jmmj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.3.0 — GHSA-j3q9-mxjg-w52f",
       "detail": "transitive, CVSS 7.5, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j3q9-mxjg-w52f",
       "finding": "path-to-regexp:GHSA-j3q9-mxjg-w52f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "picomatch 2.3.1 — GHSA-c2c7-rcm5-vvqj",
       "detail": "transitive, CVSS 7.5, fixed in 2.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c2c7-rcm5-vvqj",
       "finding": "picomatch:GHSA-c2c7-rcm5-vvqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-f886-m6hf-6m8v",
       "detail": "transitive, CVSS 6.5, fixed in 1.1.13",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f886-m6hf-6m8v",
       "finding": "brace-expansion:GHSA-f886-m6hf-6m8v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-6rw7-vpxm-498p",
       "detail": "transitive, CVSS 6.3, fixed in 6.14.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6rw7-vpxm-498p",
       "finding": "qs:GHSA-6rw7-vpxm-498p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.3.0 — GHSA-27v5-c462-wpq7",
       "detail": "transitive, CVSS 5.9, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-27v5-c462-wpq7",
       "finding": "path-to-regexp:GHSA-27v5-c462-wpq7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ajv 6.12.6 — GHSA-2g4f-4pwh-qvx6",
       "detail": "transitive, CVSS 5.5, fixed in 6.14.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2g4f-4pwh-qvx6",
       "finding": "ajv:GHSA-2g4f-4pwh-qvx6",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 2.2.0 — GHSA-wqch-xfxh-vrr4",
       "detail": "transitive, CVSS 5.5, fixed in 2.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wqch-xfxh-vrr4",
       "finding": "body-parser:GHSA-wqch-xfxh-vrr4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.21",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "picomatch 2.3.1 — GHSA-3v7f-55p6-f55p",
       "detail": "transitive, CVSS 5.3, fixed in 2.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3v7f-55p6-f55p",
       "finding": "picomatch:GHSA-3v7f-55p6-f55p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 2.2.0 — GHSA-v422-hmwv-36x6",
       "detail": "transitive, CVSS 3.7, fixed in 2.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v422-hmwv-36x6",
       "finding": "body-parser:GHSA-v422-hmwv-36x6",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.0 — GHSA-w7fw-mjwx-w883",
       "detail": "transitive, CVSS 3.7, fixed in 6.14.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7fw-mjwx-w883",
       "finding": "qs:GHSA-w7fw-mjwx-w883",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 18,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md is under `03` §7's 500-byte floor, which scores 0 regardless of content",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.docracy1/runwayleft",
   "version": "1.0.0",
   "slug": "io-github-docracy1-runwayleft",
   "scanned_at": "2026-10-16T02:37:56+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/docracy1/runwayleft",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "96e5e63ce79459e5d8a395591b43223ba4a85b76",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 9,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 76,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://runwayleft.netlify.app/.netlify/functions/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (BLOBS_TOKEN, STATS_KEY), but the README does not document which",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 61 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.dwarehouse1/vrm-toolkit-mcp",
   "version": "0.1.1",
   "slug": "io-github-dwarehouse1-vrm-toolkit-mcp",
   "scanned_at": "2026-10-16T02:38:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/dwarehouse1/vrm-toolkit-mcp",
   "package": "npm:vrm-toolkit-mcp@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "819630fddf540ff657ff3b206ecd50ea1a3b13f7",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 72 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.easytocloud/mac-letterhead",
   "version": "0.24.4",
   "slug": "io-github-easytocloud-mac-letterhead",
   "scanned_at": "2026-10-16T02:38:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/easytocloud/Mac-letterhead",
   "package": "pypi:Mac-letterhead@0.24.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 33,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 95,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 11 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (6 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 11 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 29,
     "reason": "the dependencies in 1 requirements file (tools/requirements.txt) were not measured — it pins no exact version, or could not be read whole — so the score covers the 3 lockfiles that were",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "unpinned requirements",
       "detail": "18 vulnerabilities osv-scanner reported at versions it resolved rather than read from a pin (tools/requirements.txt) are not attributed — nobody pinned those versions, so they say nothing about what this server ships",
       "path": "tools/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.9 — GHSA-8r5x-fm3f-whwj",
       "detail": "transitive, CVSS 9.8, fixed in 4.7.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8r5x-fm3f-whwj",
       "finding": "handlebars:GHSA-8r5x-fm3f-whwj",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.9 — GHSA-p8wg-vrv2-v86f",
       "detail": "transitive, CVSS 9.2, fixed in 4.7.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p8wg-vrv2-v86f",
       "finding": "handlebars:GHSA-p8wg-vrv2-v86f",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 2.0.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 2.2.0",
       "path": "dxt/uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "mcp 2.1.1 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 2.2.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "http-cache-semantics 4.2.0 — GHSA-ch52-4w7c-c8xp",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ch52-4w7c-c8xp",
       "finding": "http-cache-semantics:GHSA-ch52-4w7c-c8xp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 5.0.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 6.28.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "transitive, CVSS 7.5, fixed in 6.28.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-2vr4-cq9g-pvrc",
       "detail": "transitive, CVSS 6.9, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2vr4-cq9g-pvrc",
       "finding": "ip-address:GHSA-2vr4-cq9g-pvrc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss-selector-parser 7.1.4 — GHSA-rj75-hqrm-r3gf",
       "detail": "transitive, CVSS 5.9, fixed in 7.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rj75-hqrm-r3gf",
       "finding": "postcss-selector-parser:GHSA-rj75-hqrm-r3gf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 6.28.0 — GHSA-3wwx-pv8p-q78v",
       "detail": "transitive, CVSS 5.9, fixed in 6.28.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3wwx-pv8p-q78v",
       "finding": "undici:GHSA-3wwx-pv8p-q78v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 5.0.9 — GHSA-q2hr-2g5m-vwhr",
       "detail": "transitive, CVSS 5.3, fixed in 5.0.12",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q2hr-2g5m-vwhr",
       "finding": "brace-expansion:GHSA-q2hr-2g5m-vwhr",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "handlebars 4.7.9 — GHSA-xw65-4hp5-5hc7",
       "detail": "transitive, CVSS 4.7, fixed in 4.7.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xw65-4hp5-5hc7",
       "finding": "handlebars:GHSA-xw65-4hp5-5hc7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 6.28.0 — GHSA-r53p-7pc4-xj5r",
       "detail": "transitive, CVSS 3.7, fixed in 6.28.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r53p-7pc4-xj5r",
       "finding": "undici:GHSA-r53p-7pc4-xj5r",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.eldesh/random-mcp",
   "version": "2.1.0",
   "slug": "io-github-eldesh-random-mcp",
   "scanned_at": "2026-10-16T02:38:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/eldesh/random-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "0177e028868861301a418319b4b4acbcdc654bd8",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 15,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/utils.ts",
       "line": 63,
       "excerpt": "  }\n\n  const resp = await fetch(upstream_url, {\n    body: new URLSearchParams({\n      client_id,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://random-mcp.eldesh-tools.workers.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 7 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at worker-configuration.d.ts:11896; Hex High Entropy String at worker-configuration.d.ts:11908; Hex High Entropy String at worker-configuration.d.ts:12044; Hex High Entropy String at worker-configuration.d.ts:12050; Hex High Entropy String at worker-configuration.d.ts:12068; Hex High Entropy String at worker-configuration.d.ts:12074; Hex High Entropy String at wrangler.jsonc:17",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "6 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 48 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.35.2 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.35.2 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/client 2.0.0 — GHSA-6qxp-vccf-f47h",
       "detail": "transitive, CVSS 7.5, fixed in 2.2.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/client:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.30.0 — GHSA-6qxp-vccf-f47h",
       "detail": "transitive, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-5jgf-p345-68v8",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5jgf-p345-68v8",
       "finding": "fast-uri:GHSA-5jgf-p345-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "transitive, CVSS 7.5, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-w293-vg96-wgc3",
       "detail": "transitive, CVSS 7.4, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w293-vg96-wgc3",
       "finding": "undici:GHSA-w293-vg96-wgc3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.27 — GHSA-gqvv-2mrq-wpjv",
       "detail": "direct, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.27 — GHSA-crvj-82cr-hjcx",
       "detail": "direct, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.27 — GHSA-54fx-42gc-7vw4",
       "detail": "direct, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.27 — GHSA-8j4g-w8fx-2239",
       "detail": "direct, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.27 — GHSA-g6gw-c38x-mqfc",
       "detail": "direct, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.27 — GHSA-f23p-vx2j-j53r",
       "detail": "direct, CVSS 4.8, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.27 — GHSA-hxh3-vqpv-xpqv",
       "detail": "direct, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-2vr4-cq9g-pvrc",
       "detail": "transitive, CVSS 6.9, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2vr4-cq9g-pvrc",
       "finding": "ip-address:GHSA-2vr4-cq9g-pvrc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-2jfj-6hjv-fm6j",
       "detail": "transitive, CVSS 6.5, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2jfj-6hjv-fm6j",
       "finding": "undici:GHSA-2jfj-6hjv-fm6j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.5.0 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-3wwx-pv8p-q78v",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3wwx-pv8p-q78v",
       "finding": "undici:GHSA-3wwx-pv8p-q78v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-3xpg-4rpp-hhhm",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3xpg-4rpp-hhhm",
       "finding": "undici:GHSA-3xpg-4rpp-hhhm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-pmjh-fq2x-6v4x",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmjh-fq2x-6v4x",
       "finding": "undici:GHSA-pmjh-fq2x-6v4x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-rx4f-c7p8-82vq",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rx4f-c7p8-82vq",
       "finding": "undici:GHSA-rx4f-c7p8-82vq",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.5 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.27 — GHSA-79qm-7rj5-m7r9",
       "detail": "direct, CVSS 3.7, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-79qm-7rj5-m7r9",
       "finding": "hono:GHSA-79qm-7rj5-m7r9",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-2gqq-gqf2-x968",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2gqq-gqf2-x968",
       "finding": "undici:GHSA-2gqq-gqf2-x968",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-8436-99hf-9mmv",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8436-99hf-9mmv",
       "finding": "undici:GHSA-8436-99hf-9mmv",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.29.0 — GHSA-r53p-7pc4-xj5r",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r53p-7pc4-xj5r",
       "finding": "undici:GHSA-r53p-7pc4-xj5r",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.eltociear/skill-audit-mcp",
   "version": "1.2.0",
   "slug": "io-github-eltociear-skill-audit-mcp",
   "scanned_at": "2026-10-16T02:38:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/eltociear/skill-audit-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "85477d2ff322a64c85453e40cc7d55d374147b1d",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 60,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "bin/mcp-audit.js",
       "line": 9,
       "excerpt": "\ntry {\n  execSync(`python3 \"${cliPath}\" ${args}`, { stdio: 'inherit' });\n} catch (e) {\n  process.exit(e.status || 1);",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "bin/mcp-audit.js",
       "line": 9,
       "excerpt": "\ntry {\n  execSync(`python3 \"${cliPath}\" ${args}`, { stdio: 'inherit' });\n} catch (e) {\n  process.exit(e.status || 1);",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "replicate/predict.py",
       "line": 51,
       "excerpt": "                headers={\"User-Agent\": \"skill-audit-mcp/1.0 (+https://github.com/eltociear/skill-audit-mcp)\"},\n            )\n            with urllib.request.urlopen(req, timeout=15) as r:\n                content = r.read(max_bytes).decode(\"utf-8\", errors=\"replace\")\n        return self.scanner.scan(content)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://eltociear-skill-audit.hf.space/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 16 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 4 issue(s) in the last 6 months: 26.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 11 days (by releases), last release 158 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 55,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.enzoemir1/adops-mcp",
   "version": "1.3.0",
   "slug": "io-github-enzoemir1-adops-mcp",
   "scanned_at": "2026-10-16T02:38:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/enzoemir1/adops-mcp",
   "package": "npm:adops-mcp-server@1.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 15,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "17 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 33 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 3 days (by releases), last release 174 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.f-o-x11/metadata-connector",
   "version": "1.0.0",
   "slug": "io-github-f-o-x11-metadata-connector",
   "scanned_at": "2026-10-16T02:38:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/f-o-x11/metadata-mcp-connector",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "6bd649e182eef2e6ac837f23f121af2277f82190",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "mcpb/server/index.mjs",
       "line": 41,
       "excerpt": "  const capabilities = {};\n  for (const name of ['tools', 'resources', 'prompts']) {\n    if (available[name]) capabilities[name] = {};\n  }\n  server = new Server(",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp-server.metadata.io/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (METADATA_MCP_TOKEN) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 84,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 16 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 30 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 85,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "@modelcontextprotocol/sdk 1.30.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "mcpb/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 45,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.fabionfsc/nuzo-memory",
   "version": "1.2.0",
   "slug": "io-github-fabionfsc-nuzo-memory",
   "scanned_at": "2026-10-16T02:38:30+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/fabionfsc/nuzo-memory",
   "package": "npm:@nuzo/memory-mcp@1.2.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "558a0c2ca21e609b5f74c04d72846877229e1b22",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 1.2.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 63 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 0 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 63 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.fernsugi/x402-api",
   "version": "1.0.5",
   "slug": "io-github-fernsugi-x402-api",
   "scanned_at": "2026-10-16T02:38:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/fernsugi/x402-api-mcp-server",
   "package": "npm:@x402-api/mcp-server@1.0.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "44bdf37b679c53755889dd786cd08a18fe1bc3b0",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository at version 1.0.5, because the published package carries its code only as build output, which is not read as the server's own source; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 78,
       "excerpt": "      }\n      _fetchFn = async (url, init) => {\n        const response = await fetch(url, init);\n        if (response.status !== 402) return response;\n        const challenge = await response.clone().json() as {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 120,
       "excerpt": "        const headers = new Headers(init?.headers);\n        headers.set('X-Payment', payload);\n        return fetch(url, { ...init, headers });\n      };\n      process.stderr.write(`[x402-mcp] Base USDC auto-pay enabled. Wallet: ${account.address}; cap ${maxPerCall} USDC/call\\n`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:90",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 64,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 16 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 181.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 16 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.flujo-app/mcp-sandbox-computer-vm-for-ai",
   "version": "0.2.3",
   "slug": "io-github-flujo-app-mcp-sandbox-computer-vm-for-ai",
   "scanned_at": "2026-10-16T02:38:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/flujo-app/mcp-sandbox-computer-vm-for-ai",
   "package": "pypi:mcp-sandbox-computer-vm-for-ai@0.2.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 43,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "10 findings in test code are listed but not deducted",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/kilntainers/fly_runtime.py",
       "line": 81,
       "excerpt": "def _open_url(url: str):\n    request = urllib.request.Request(url, headers={\"User-Agent\": _USER_AGENT})\n    return urllib.request.urlopen(request, timeout=60)\n\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 105,
       "excerpt": "        \"\"\"Test that ls command works.\"\"\"\n        # Create some test files from Python\n        with open(os.path.join(sandbox._sandbox_dir, \"file1.txt\"), \"w\") as f:\n            f.write(\"content1\")\n        with open(os.path.join(sandbox._sandbox_dir, \"file2.txt\"), \"w\") as f:",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 107,
       "excerpt": "        with open(os.path.join(sandbox._sandbox_dir, \"file1.txt\"), \"w\") as f:\n            f.write(\"content1\")\n        with open(os.path.join(sandbox._sandbox_dir, \"file2.txt\"), \"w\") as f:\n            f.write(\"content2\")\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 126,
       "excerpt": "        \"\"\"Test that cat can read multiple files.\"\"\"\n        # Create test files from Python\n        with open(os.path.join(sandbox._sandbox_dir, \"a.txt\"), \"w\") as f:\n            f.write(\"AAA\")\n        with open(os.path.join(sandbox._sandbox_dir, \"b.txt\"), \"w\") as f:",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 128,
       "excerpt": "        with open(os.path.join(sandbox._sandbox_dir, \"a.txt\"), \"w\") as f:\n            f.write(\"AAA\")\n        with open(os.path.join(sandbox._sandbox_dir, \"b.txt\"), \"w\") as f:\n            f.write(\"BBB\")\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 147,
       "excerpt": "        \"\"\"Test that grep command works.\"\"\"\n        # Create test files from Python\n        with open(os.path.join(sandbox._sandbox_dir, \"test.txt\"), \"w\") as f:\n            f.write(\"hello world\\ngoodbye world\")\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 167,
       "excerpt": "        # Create directory structure from Python\n        os.makedirs(os.path.join(sandbox._sandbox_dir, \"subdir\"), exist_ok=True)\n        with open(os.path.join(sandbox._sandbox_dir, \"subdir\", \"file.txt\"), \"w\") as f:\n            f.write(\"wasm is cool\")\n        with open(os.path.join(sandbox._sandbox_dir, \"root.txt\"), \"w\") as f:",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 169,
       "excerpt": "        with open(os.path.join(sandbox._sandbox_dir, \"subdir\", \"file.txt\"), \"w\") as f:\n            f.write(\"wasm is cool\")\n        with open(os.path.join(sandbox._sandbox_dir, \"root.txt\"), \"w\") as f:\n            f.write(\"wasm rules\")\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 217,
       "excerpt": "        \"\"\"Test head and tail commands.\"\"\"\n        # Create a file with multiple lines\n        with open(os.path.join(sandbox._sandbox_dir, \"lines.txt\"), \"w\") as f:\n            for i in range(1, 11):\n                f.write(f\"line {i}\\n\")",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 247,
       "excerpt": "    async def test_wc_command(self, sandbox):\n        \"\"\"Test wc (word count) command.\"\"\"\n        with open(os.path.join(sandbox._sandbox_dir, \"wc_test.txt\"), \"w\") as f:\n            f.write(\"one two three\\nfour five six\\n\")\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/kilntainers/backends/test_wasm_go_busybox.py",
       "line": 308,
       "excerpt": "        \"\"\"Test that the filesystem persists across exec calls.\"\"\"\n        # Create a file via Python\n        with open(os.path.join(sandbox._sandbox_dir, \"persist.txt\"), \"w\") as f:\n            f.write(\"persistent data\")\n",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at src/kilntainers/backends/test_e2b.py:132; Hex High Entropy String at src/kilntainers/backends/test_fly.py:28; Secret Keyword at src/kilntainers/backends/test_modal.py:304; Secret Keyword at src/kilntainers/backends/test_modal_integration.py:122",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 40 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 13 days (by releases), last release 40 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 44,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.freema/openclaw-mcp",
   "version": "1.7.0",
   "slug": "io-github-freema-openclaw-mcp",
   "scanned_at": "2026-10-16T02:38:41+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/freema/openclaw-mcp",
   "package": "npm:openclaw-mcp@1.7.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "751d58a4d6947809e18d968d92604e50398ee98c",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 32,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository at version 1.7.0, because the published package carries its code only as build output, which is not read as the server's own source; 5 findings in test code are listed but not deducted; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/openclaw/client.ts",
       "line": 58,
       "excerpt": "\n    try {\n      const response = await fetch(url, {\n        ...options,\n        signal: controller.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/openclaw/client.ts",
       "line": 129,
       "excerpt": "\n    try {\n      const response = await fetch(url, {\n        method: 'POST',\n        signal: controller.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/server/auth-integration.test.ts",
       "line": 183,
       "excerpt": "    authorizeUrl.searchParams.set('code_challenge_method', 'S256');\n\n    const authorizeRes = await fetch(authorizeUrl.toString(), { redirect: 'manual' });\n    expect(authorizeRes.status).toBe(302);\n    const location = authorizeRes.headers.get('location')!;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/server/auth-integration.test.ts",
       "line": 236,
       "excerpt": "    authorizeUrl.searchParams.set('code_challenge_method', 'S256');\n\n    const res = await fetch(authorizeUrl.toString(), { redirect: 'manual' });\n    expect(res.status).toBe(400);\n    const body: any = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/server/auth-integration.test.ts",
       "line": 254,
       "excerpt": "    authorizeUrl.searchParams.set('scope', 'mcp:tools');\n\n    const res = await fetch(authorizeUrl.toString(), { redirect: 'manual' });\n    expect(res.status).toBe(302);\n    const location = new URL(res.headers.get('location')!);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/server/auth-integration.test.ts",
       "line": 307,
       "excerpt": "\n  it('accepts a listed redirect_uri', async () => {\n    const res = await fetch(authorizeUrlWith(ALLOWED_URI), { redirect: 'manual' });\n    expect(res.status).toBe(302);\n    const location = new URL(res.headers.get('location')!);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/server/auth-integration.test.ts",
       "line": 315,
       "excerpt": "\n  it('rejects an unlisted redirect_uri', async () => {\n    const res = await fetch(authorizeUrlWith('https://evil.example.com/callback'), {\n      redirect: 'manual',\n    });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at dist/index.js:11",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 86,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 27 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 6 issue(s) in the last 6 months: 4.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 9 days (by releases), last release 82 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.geeks-accelerator/inbed",
   "version": "1.0.2",
   "slug": "io-github-geeks-accelerator-inbed",
   "scanned_at": "2026-10-16T02:38:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/geeks-accelerator/in-bed-ai",
   "package": "npm:mcp-inbed-dating@1.0.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "ddc67fd347589dfa0b3282e0cee8a25667a8e39b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 177,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 39,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "scripts/lib/clawhub-account.mjs",
       "line": 47,
       "excerpt": "  let handle = null;\n  try {\n    const out = execSync(`${CLI} whoami --no-input 2>&1`, { encoding: 'utf-8', timeout: 60000 });\n    // Interactive output is \"✔ handle\"; piped output is just \"handle\".\n    const last = out.trim().split('\\n').pop() || '';",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "scripts/publish-plugin.mjs",
       "line": 45,
       "excerpt": "const TOPICS = 'dating,ai-agents,matchmaking,compatibility,mcp';\n\nconst run = (cmd, opts = {}) => execSync(cmd, { cwd: ROOT, encoding: 'utf-8', stdio: ['ignore', 'pipe', 'pipe'], ...opts });\nconst fail = (msg) => { console.error(`\\n✖ ${msg}`); process.exit(1); };\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "scripts/publish-skills.mjs",
       "line": 227,
       "excerpt": "    if (DRY_RUN) {\n      try {\n        execSync(publishCommand(slug, displayName, version, { dryRun: true }),\n          { encoding: 'utf-8', timeout: 120000, stdio: ['pipe', 'pipe', 'pipe'] });\n        // The CLI's --dry-run only packs locally (no server-side checks); ownership",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "scripts/publish-skills.mjs",
       "line": 253,
       "excerpt": "    for (let attempt = 0; attempt < 3 && !handled; attempt++) {\n      try {\n        const out = execSync(publishCommand(slug, displayName, version),\n          { encoding: 'utf-8', timeout: 120000, stdio: ['pipe', 'pipe', 'pipe'] });\n        // --json reports publicationStatus: \"published\", or \"pending\" when the",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/app/profiles/[id]/opengraph-image.tsx",
       "line": 58,
       "excerpt": "  if (rawAvatarUrl) {\n    try {\n      const avatarRes = await fetch(rawAvatarUrl);\n      if (avatarRes.ok) {\n        const buf = await avatarRes.arrayBuffer();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/lib/docs.ts",
       "line": 17,
       "excerpt": " */\nexport function readRepoFile(relPath: string): string {\n  return fs.readFileSync(path.join(/*turbopackIgnore: true*/ process.cwd(), relPath), 'utf-8');\n}\n",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/leonardo/generate-avatar.ts",
       "line": 66,
       "excerpt": "\n    // 4. Download the generated image\n    const imageResponse = await fetch(imageUrl);\n    if (!imageResponse.ok) {\n      throw new Error(`Failed to download generated image: ${imageResponse.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:62; Secret Keyword at build/credentials.js:25",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 10 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.geoacpfilho/paygate-monetize-monetization-x402",
   "version": "0.3.1",
   "slug": "io-github-geoacpfilho-paygate-monetize-monetization-x402",
   "scanned_at": "2026-10-16T02:38:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/geoacpfilho/paygate-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "67333b060e7aada7755e4cd2d6c46f214bd5945a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 15,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 85,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/pay-test.mjs",
       "line": 35,
       "excerpt": "\nasync function rpc(payload) {\n  const resp = await fetch(endpoint, {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/api/paygate-tools.ts",
       "line": 271,
       "excerpt": "        target_server_url.includes('oraculo-b2r') && c.env.ORACULO_B2R\n          ? await c.env.ORACULO_B2R.fetch(request)\n          : await fetch(request);\n\n      const raw = await probe.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/api/paygate-tools.ts",
       "line": 379,
       "excerpt": "    let served = '';\n    try {\n      const resp = await fetch(verifyUrl, { method: 'GET' });\n      if (!resp.ok) {\n        return toolFailure(",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/api/proxy.ts",
       "line": 73,
       "excerpt": "    return c.env.ORACULO_B2R.fetch(request);\n  }\n  return fetch(request);\n}\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/api/register.ts",
       "line": 64,
       "excerpt": "    let importedToolsCount = 0;\n    try {\n      const resp = await fetch(target_server_url, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/payment-verifier.ts",
       "line": 25,
       "excerpt": "  if (facilitatorUrl) {\n    try {\n      const resp = await fetch(facilitatorUrl, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/payment-verifier.ts",
       "line": 70,
       "excerpt": "      // Buscar recibo da transação na rede Base\n      const rpcUrl = `https://base-mainnet.g.alchemy.com/v2/${alchemyApiKey}`;\n      const resp = await fetch(rpcUrl, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/payment-verifier.ts",
       "line": 286,
       "excerpt": "  const signatureBase64 = btoa(String.fromCharCode(...new Uint8Array(signature)));\n\n  return fetch(url, {\n    method,\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/x402/facilitator.ts",
       "line": 161,
       "excerpt": "  }\n\n  const resp = await fetch(url, {\n    method: 'POST',\n    headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/x402/facilitator.ts",
       "line": 209,
       "excerpt": "    }\n\n    const resp = await fetch(url, { headers });\n    const text = await resp.text();\n    let networks: string[] = [];",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://paygate-mcp.rendercriativo.workers.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at src/api/paygate-tools.ts:36; Secret Keyword at src/api/paygate-tools.ts:312; Secret Keyword at src/api/paygate-tools.ts:342; Secret Keyword at src/api/register.ts:39",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "6 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 63 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 45,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "nanoid 3.3.16 — GHSA-2v37-7h3g-55p8",
       "detail": "direct, CVSS 8.2, fixed in 3.3.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-rfgv-xxqx-mfg5",
       "detail": "transitive, CVSS 7.5, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rfgv-xxqx-mfg5",
       "finding": "undici:GHSA-rfgv-xxqx-mfg5",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-4cwx-7wf7-3272",
       "detail": "transitive, CVSS 7.4, fixed in 7.29.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4cwx-7wf7-3272",
       "finding": "undici:GHSA-4cwx-7wf7-3272",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-w293-vg96-wgc3",
       "detail": "transitive, CVSS 7.4, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w293-vg96-wgc3",
       "finding": "undici:GHSA-w293-vg96-wgc3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-f88m-g3jw-g9cj",
       "detail": "transitive, CVSS 7.0, fixed in 0.35.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f88m-g3jw-g9cj",
       "finding": "sharp:GHSA-f88m-g3jw-g9cj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.31 — GHSA-gqvv-2mrq-wpjv",
       "detail": "direct, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.31 — GHSA-crvj-82cr-hjcx",
       "detail": "direct, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 4.1.10 — GHSA-82fw-gwwq-j7x9",
       "detail": "direct, CVSS 5.9, fixed in 4.1.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "vitest:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.31 — GHSA-54fx-42gc-7vw4",
       "detail": "direct, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.31 — GHSA-8j4g-w8fx-2239",
       "detail": "direct, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.31 — GHSA-g6gw-c38x-mqfc",
       "detail": "direct, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.31 — GHSA-f23p-vx2j-j53r",
       "detail": "direct, CVSS 4.8, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.31 — GHSA-hxh3-vqpv-xpqv",
       "detail": "direct, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-2jfj-6hjv-fm6j",
       "detail": "transitive, CVSS 6.5, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2jfj-6hjv-fm6j",
       "finding": "undici:GHSA-2jfj-6hjv-fm6j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.21 — GHSA-fxqj-rqcc-2cmp",
       "detail": "transitive, CVSS 6.3, fixed in 8.5.23",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp",
       "finding": "postcss:GHSA-fxqj-rqcc-2cmp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@vitest/mocker 4.1.10 — GHSA-82fw-gwwq-j7x9",
       "detail": "transitive, CVSS 5.9, fixed in 4.1.11",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "@vitest/mocker:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-3wwx-pv8p-q78v",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3wwx-pv8p-q78v",
       "finding": "undici:GHSA-3wwx-pv8p-q78v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-3xpg-4rpp-hhhm",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3xpg-4rpp-hhhm",
       "finding": "undici:GHSA-3xpg-4rpp-hhhm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-jr45-8vmc-qm54",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jr45-8vmc-qm54",
       "finding": "undici:GHSA-jr45-8vmc-qm54",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-pmjh-fq2x-6v4x",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmjh-fq2x-6v4x",
       "finding": "undici:GHSA-pmjh-fq2x-6v4x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-rx4f-c7p8-82vq",
       "detail": "transitive, CVSS 5.9, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rx4f-c7p8-82vq",
       "finding": "undici:GHSA-rx4f-c7p8-82vq",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.18.20 — GHSA-67mh-4wv8-2f99",
       "detail": "transitive, CVSS 5.3, fixed in 0.25.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-67mh-4wv8-2f99",
       "finding": "esbuild:GHSA-67mh-4wv8-2f99",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-8xcm-r25x-g524",
       "detail": "transitive, CVSS 4.8, fixed in 7.29.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8xcm-r25x-g524",
       "finding": "undici:GHSA-8xcm-r25x-g524",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-v3r7-h72x-cjcm",
       "detail": "transitive, CVSS 4.8, fixed in 7.29.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v3r7-h72x-cjcm",
       "finding": "undici:GHSA-v3r7-h72x-cjcm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-m8rv-5g2x-5cg5",
       "detail": "transitive, CVSS 4.2, fixed in 7.29.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m8rv-5g2x-5cg5",
       "finding": "undici:GHSA-m8rv-5g2x-5cg5",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.31 — GHSA-79qm-7rj5-m7r9",
       "detail": "direct, CVSS 3.7, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-79qm-7rj5-m7r9",
       "finding": "hono:GHSA-79qm-7rj5-m7r9",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-2gqq-gqf2-x968",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2gqq-gqf2-x968",
       "finding": "undici:GHSA-2gqq-gqf2-x968",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-8436-99hf-9mmv",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8436-99hf-9mmv",
       "finding": "undici:GHSA-8436-99hf-9mmv",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "undici 7.28.0 — GHSA-r53p-7pc4-xj5r",
       "detail": "transitive, CVSS 3.7, fixed in 7.29.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r53p-7pc4-xj5r",
       "finding": "undici:GHSA-r53p-7pc4-xj5r",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.goww7/acttrace",
   "version": "0.1.0",
   "slug": "io-github-goww7-acttrace",
   "scanned_at": "2026-10-16T02:38:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/goww7/acttrace",
   "package": "pypi:acttrace-mcp@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 26,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 153 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 19,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "pyproject.toml declares 'Apache-2.0' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.gregario/lorcana-oracle",
   "version": "0.1.0",
   "slug": "io-github-gregario-lorcana-oracle",
   "scanned_at": "2026-10-16T02:38:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/gregario/lorcana-oracle",
   "package": "npm:lorcana-oracle@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "1af2d61c450c66b1ed75860565a9ca6b01d1665f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 123 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.gulmezeren2-byte/ihalent",
   "version": "0.3.0",
   "slug": "io-github-gulmezeren2-byte-ihalent",
   "scanned_at": "2026-10-16T02:39:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/gulmezeren2-byte/ihalent",
   "package": "pypi:ihalent@0.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "1 tool registration site(s) detected, but tools are registered inside a loop, so that is a lower bound on how many the server exposes and `03` §4's threshold of 3 cannot be applied",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 73 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 6.5 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 6 days (by releases), last release 79 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 46,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.28.1 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "cryptography 49.0.0 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4143",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4143",
       "finding": "pyjwt:PYSEC-2026-4143",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4150",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4150",
       "finding": "pyjwt:PYSEC-2026-4150",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4151",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4151",
       "finding": "pyjwt:PYSEC-2026-4151",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4142",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4142",
       "finding": "pyjwt:PYSEC-2026-4142",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 46,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.hassanahashish-design/agent-signals-mcp",
   "version": "1.0.2",
   "slug": "io-github-hassanahashish-design-agent-signals-mcp",
   "scanned_at": "2026-10-16T02:39:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/hassanahashish-design/agent-signals-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "fe3f01c6394ee8f323ebf586e6d6046b778ca527",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/sync-actors.mjs",
       "line": 99,
       "excerpt": "  };\n  if (sessionId) headers['mcp-session-id'] = sessionId;\n  const r = await fetch(target, { method: 'POST', headers, body: JSON.stringify(body) });\n  const text = await r.text();\n  return { status: r.status, session: r.headers.get('mcp-session-id'), text };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.apify.com/?actors=oblanceolate_mandola%2Fcompany-hiring-signals%2Coblanceolate_mandola%2Fsec-edgar-filings%2Coblanceolate_mandola%2Fresearch-paper-search%2Coblanceolate_mandola%2Fgithub-repo-search%2Coblanceolate_mandola%2Fhacker-news-monitor%2Coblanceolate_mandola%2Ffederal-register-monitor%2Coblanceolate_mandola%2Fclinical-trials-search%2Coblanceolate_mandola%2Fstackoverflow-search%2Coblanceolate_mandola%2Fgdelt-news-monitor%2Coblanceolate_mandola%2Fcourt-opinions-search; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at LISTINGS.md:29",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 91 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.hidai25/evalview-mcp",
   "version": "0.6.0",
   "slug": "io-github-hidai25-evalview-mcp",
   "scanned_at": "2026-10-16T02:39:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/hidai25/eval-view",
   "package": "pypi:evalview@0.6.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 176,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "evalview/chat.py",
       "line": 1947,
       "excerpt": "                    # Use the same spinner style for tool execution\n                    with console.status(f\"[bold green]Running {cmd}...[/bold green]\", spinner=\"dots\"):\n                        proc = subprocess.run(\n                            cmd,\n                            shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly. On a hosted MCP server this is the canonical path from SSRF to credential theft: 169.254.169.254 serves IAM role credentials to anything that asks.",
       "path": "evalview/core/security.py",
       "line": 34,
       "excerpt": "    ipaddress.ip_network(\"fe80::/10\"),\n    # Cloud metadata endpoints\n    ipaddress.ip_network(\"169.254.169.254/32\"),  # AWS/GCP/Azure metadata\n    # Localhost IPv6\n    ipaddress.ip_network(\"::ffff:127.0.0.0/104\"),",
       "url": "",
       "finding": "mcp-python-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly. On a hosted MCP server this is the canonical path from SSRF to credential theft: 169.254.169.254 serves IAM role credentials to anything that asks.",
       "path": "evalview/core/security.py",
       "line": 46,
       "excerpt": "    \"localhost\",\n    \"localhost.localdomain\",\n    \"metadata.google.internal\",\n    \"metadata.goog\",\n    \"kubernetes.default.svc\",",
       "url": "",
       "finding": "mcp-python-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "evalview/openclaw.py",
       "line": 107,
       "excerpt": "    )\n    try:\n        subprocess.run(revert_cmd, shell=True, check=True, capture_output=True)\n    except subprocess.CalledProcessError as e:\n        logger.warning(f\"Revert command failed: {e}\")",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "evalview/openclaw.py",
       "line": 158,
       "excerpt": "            cmd = revert_cmd or \"git checkout -- .\"\n            try:\n                subprocess.run(cmd, shell=True, check=True, capture_output=True)\n                reverted = True\n            except subprocess.CalledProcessError:",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "evalview/skills/evaluators/deterministic.py",
       "line": 776,
       "excerpt": "\n        try:\n            result = subprocess.run(\n                command,\n                shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "evalview/skills/evaluators/deterministic.py",
       "line": 846,
       "excerpt": "            else:\n                # Simple foreground command\n                result = subprocess.run(\n                    smoke_test.command,\n                    shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "evalview/skills/evaluators/deterministic.py",
       "line": 903,
       "excerpt": "        try:\n            # Start background process\n            process = subprocess.Popen(\n                smoke_test.command,\n                shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "evalview/skills/evaluators/deterministic.py",
       "line": 1003,
       "excerpt": "            if smoke_test.cleanup:\n                try:\n                    subprocess.run(\n                        smoke_test.cleanup,\n                        shell=True,",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/capture_cmd.py",
       "line": 321,
       "excerpt": "                import time as _time\n                _req_start = _time.monotonic()\n                resp = httpx.post(\n                    agent_url,\n                    content=body,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/gym_cmd.py",
       "line": 135,
       "excerpt": "    # Check if endpoint is reachable\n    try:\n        httpx.get(f\"{endpoint.rstrip('/')}/health\", timeout=5.0)\n        console.print(\"[green]✓ Agent endpoint reachable[/green]\\n\")\n    except Exception:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/init_cmd.py",
       "line": 124,
       "excerpt": "    def _probe(query: str) -> Optional[Dict[str, Any]]:\n        try:\n            r = httpx.post(endpoint, json={\"query\": query}, timeout=30.0)\n            r.raise_for_status()\n            return r.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/init_cmd.py",
       "line": 832,
       "excerpt": "        console.print(\"[dim]Probing agent to detect profile...[/dim]\")\n        try:\n            probe_resp = httpx.post(\n                endpoint,\n                json={\"query\": \"Hello, what can you help me with?\"},",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/init_cmd.py",
       "line": 937,
       "excerpt": "        console.print(f\"\\n[dim]Checking agent at {endpoint}...[/dim]\")\n        try:\n            _preflight = _httpx.post(endpoint, json={\"query\": \"ping\"}, timeout=5.0)\n            if _preflight.status_code != 200:\n                try:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/shared.py",
       "line": 348,
       "excerpt": "        for path in health_paths:\n            try:\n                r = httpx.get(f\"http://localhost:{port}{path}\", timeout=2.0)\n                if r.status_code == 200:\n                    data = r.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/shared.py",
       "line": 361,
       "excerpt": "            url = f\"http://localhost:{port}{path}\"\n            try:\n                r = httpx.post(url, json={\"query\": \"ping\"}, timeout=2.0)\n                if r.status_code == 200:\n                    try:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/shared.py",
       "line": 382,
       "excerpt": "            for path in execute_paths:\n                try:\n                    r = httpx.post(f\"http://localhost:{port}{path}\", json={\"query\": \"ping\"}, timeout=2.0)\n                    # Any non-404 response means this path exists\n                    if r.status_code != 404:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/commands/shared.py",
       "line": 392,
       "excerpt": "            for path in health_paths:\n                try:\n                    r = httpx.get(f\"http://localhost:{port}{path}\", timeout=2.0)\n                    if r.status_code == 200:\n                        seen_ports.add(port)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "evalview/skills/evaluators/deterministic.py",
       "line": 933,
       "excerpt": "                    try:\n                        import urllib.request\n                        response = urllib.request.urlopen(\n                            smoke_test.health_check, timeout=2\n                        )",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 20 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at evalview/chat.py:580; Base64 High Entropy String at evalview/cloud/client.py:13; Secret Keyword at evalview/commands/init_cmd.py:1074; Secret Keyword at evalview/core/llm_configs.py:58; Secret Keyword at evalview/core/llm_configs.py:65; Secret Keyword at evalview/core/llm_configs.py:72; Secret Keyword at evalview/core/llm_configs.py:79; Secret Keyword at evalview/core/llm_configs.py:86; Secret Keyword at evalview/core/llm_configs.py:93; Secret Keyword at evalview/core/llm_configs.py:100; …and 10 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 41 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 2 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 4 days (by releases), last release 82 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 24,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.huandu/feishu-markdown-mcp",
   "version": "0.1.3",
   "slug": "io-github-huandu-feishu-markdown-mcp",
   "scanned_at": "2026-10-16T02:39:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/huandu/feishu-markdown",
   "package": "npm:feishu-markdown-mcp@0.1.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 37,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 283 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (0 issue(s) in the last 6 months, under `03` §5's floor of 3): 245.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by tags), last release 283 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.humanpen/humanpen-mcp",
   "version": "1.4.3",
   "slug": "io-github-humanpen-humanpen-mcp",
   "scanned_at": "2026-10-16T02:39:17+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/humanpen/humanpen-mcp",
   "package": "npm:humanpen-mcp@1.4.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "f0225312d4874ab903e3623db98d6b2aba8e9c41",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository at version 1.4.3, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 262,
       "excerpt": "\n    // A presigned link: a plain GET, no Authorization header, short-lived.\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new HumanPenError(",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.ja.md:56; Secret Keyword at README.md:57; Secret Keyword at README.zh-CN.md:54; Secret Keyword at dist/index.js:192",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 65 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 65 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ilyautov/chestny-znak-mcp-ru",
   "version": "0.3.0",
   "slug": "io-github-ilyautov-chestny-znak-mcp-ru",
   "scanned_at": "2026-10-16T02:39:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ilyautov/chestny-znak-mcp-ru",
   "package": "pypi:chestny-znak-mcp-ru@0.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 11 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 32 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 24,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.im-sham/aegis-protocol",
   "version": "0.1.3",
   "slug": "io-github-im-sham-aegis-protocol",
   "scanned_at": "2026-10-16T02:39:22+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/im-sham/aegis-protocol",
   "package": "npm:@aegis-protocol/mcp-server@0.1.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "fa7c97f17390c6a5857311534b6d66aa9f62f937",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 113,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 29 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:58; Secret Keyword at dist/chunk-4YSC5E6L.js:888; Secret Keyword at dist/chunk-4YSC5E6L.js:893; Base64 High Entropy String at dist/index.js:17699; Base64 High Entropy String at dist/lib-M5T5AJGR.js:4182; Secret Keyword at dist/lib-M5T5AJGR.js:8144; Secret Keyword at dist/lib-M5T5AJGR.js:8145; Base64 High Entropy String at dist/lib-M5T5AJGR.js:12130; Base64 High Entropy String at dist/lib-M5T5AJGR.js:12361; Hex High Entropy String at dist/lib-M5T5AJGR.js:22338; …and 19 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 32,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 128 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (2 issue(s) in the last 6 months, under `03` §5's floor of 3): 92.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.imouiche/mitre-attack-mcp-server",
   "version": "0.1.1",
   "slug": "io-github-imouiche-mitre-attack-mcp-server",
   "scanned_at": "2026-10-16T02:39:30+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/imouiche/complete-mitre-attack-mcp-server",
   "package": "npm:@imouiche/mitre-attack-mcp-server@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "65 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 298 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'Apache-2.0' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.imviky-ctrl/tickerr",
   "version": "1.0.1",
   "slug": "io-github-imviky-ctrl-tickerr",
   "scanned_at": "2026-10-16T02:39:33+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/imviky-ctrl/tickerr-mcp",
   "package": "npm:tickerr-mcp@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "6c817ad7a1572e5ac272d4859ac8f7fce1788c60",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://tickerr.ai/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 157 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.infoinlet-marketplace/mcp-kafka",
   "version": "0.1.1",
   "slug": "io-github-infoinlet-marketplace-mcp-kafka",
   "scanned_at": "2026-10-16T02:39:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/infoinlet-marketplace/marketplace",
   "package": "npm:@infoinlet/mcp-kafka@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (3 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 17,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.infoinlet-marketplace/mcp-stripe",
   "version": "0.1.1",
   "slug": "io-github-infoinlet-marketplace-mcp-stripe",
   "scanned_at": "2026-10-16T02:39:38+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/infoinlet-marketplace/marketplace",
   "package": "npm:@infoinlet/mcp-stripe@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (3 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:8",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 17,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.inotakeh/symbol",
   "version": "0.10.1",
   "slug": "io-github-inotakeh-symbol",
   "scanned_at": "2026-10-16T02:39:40+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/inotakeh/symbol-mcp-server",
   "package": "npm:symbol-mcp-server@0.10.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "4be75edeb20ce5b82e84d42846ce1f299f62bb4e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 82,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "scored on the declared repository at version 0.10.1, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/release-definitions.mjs",
       "line": 144,
       "excerpt": "  }\n  for (const key of ['inputSchema', 'outputSchema']) {\n    if (Object.hasOwn(shape, key)) shape[key] = splitSchema(shape[key], `${path}/${key}`, texts);\n  }\n  return shape;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/capture-fixtures.mjs",
       "line": 111,
       "excerpt": "async function main() {\n  const { baseUrl, force, account } = parseArgs(process.argv.slice(2));\n  const get = (path) => request(baseUrl, 'GET', path);\n  const post = (path, body) => request(baseUrl, 'POST', path, body);\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/capture-fixtures.mjs",
       "line": 112,
       "excerpt": "  const { baseUrl, force, account } = parseArgs(process.argv.slice(2));\n  const get = (path) => request(baseUrl, 'GET', path);\n  const post = (path, body) => request(baseUrl, 'POST', path, body);\n\n  const nodeInfo = await get('/node/info');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 76,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "AWS Access Key at dist/domain/network.js:10; …and 6 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 3 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.jascal/orca-mcp-server",
   "version": "0.1.30",
   "slug": "io-github-jascal-orca-mcp-server",
   "scanned_at": "2026-10-16T02:39:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/jascal/orca-lang",
   "package": "npm:@orcalang/orca-mcp-server@0.1.30",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "c16a133851209a530f1826358cb7182bb8eede3f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository at version 0.1.30, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/server.ts",
       "line": 231,
       "excerpt": "  if (!grammarSpecContent) {\n    try {\n      grammarSpecContent = readFileSync(resolve(__dirname, '../../../docs/orca-md-grammar-spec.md'), 'utf-8');\n    } catch {\n      grammarSpecContent = '# Orca Grammar Specification\\n\\nGrammar spec not found. See AGENTS.md for syntax reference.';",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/server.ts",
       "line": 283,
       "excerpt": "    if (example) {\n      try {\n        const content = readFileSync(resolve(EXAMPLES_DIR, example.file), 'utf-8');\n        return {\n          contents: [{",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 135 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 135 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'Apache-2.0' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.jgalea/telegram-mcp",
   "version": "0.1.2",
   "slug": "io-github-jgalea-telegram-mcp",
   "scanned_at": "2026-10-16T02:39:48+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/jgalea/telegram-mcp",
   "package": "pypi:telegram-mcp-jgalea@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 8,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/telegram_mcp/cache.py",
       "line": 153,
       "excerpt": "            return set()\n        placeholders = \",\".join(\"?\" for _ in msg_ids)\n        rows = self._conn.execute(\n            f\"SELECT id FROM messages WHERE chat_id = ? AND id IN ({placeholders})\",\n            [chat_id, *msg_ids],",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 81,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 11 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 8.0 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 11 day(s) ago (by tags), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "cryptography 46.0.6 — PYSEC-2026-36",
       "detail": "transitive, CVSS 9.8, fixed in 46.0.7",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3481",
       "detail": "direct, CVSS 7.6, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3481",
       "finding": "mcp:PYSEC-2026-3481",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3483",
       "detail": "direct, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "mcp 1.26.0 — PYSEC-2026-3482",
       "detail": "direct, CVSS 7.1, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3482",
       "finding": "mcp:PYSEC-2026-3482",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.6 — PYSEC-2026-3553",
       "detail": "transitive, CVSS 8.7, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.6 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.6 — GHSA-537c-gmf6-5ccf",
       "detail": "transitive, CVSS 7.5, fixed in 48.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-537c-gmf6-5ccf",
       "finding": "cryptography:GHSA-537c-gmf6-5ccf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyasn1 0.6.3 — PYSEC-2026-3455",
       "detail": "transitive, CVSS 7.5, fixed in 0.6.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3455",
       "finding": "pyasn1:PYSEC-2026-3455",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyasn1 0.6.3 — PYSEC-2026-3456",
       "detail": "transitive, CVSS 7.5, fixed in 0.6.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3456",
       "finding": "pyasn1:PYSEC-2026-3456",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyasn1 0.6.3 — PYSEC-2026-3457",
       "detail": "transitive, CVSS 7.5, fixed in 0.6.4",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3457",
       "finding": "pyasn1:PYSEC-2026-3457",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3036",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3036",
       "finding": "python-multipart:PYSEC-2026-3036",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3039",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.27",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3039",
       "finding": "python-multipart:PYSEC-2026-3039",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-2281",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2281",
       "finding": "starlette:PYSEC-2026-2281",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-249",
       "detail": "transitive, CVSS 7.5, fixed in 1.3.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-249",
       "finding": "starlette:PYSEC-2026-249",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-179",
       "detail": "transitive, CVSS 7.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-179",
       "finding": "pyjwt:PYSEC-2026-179",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pytest 9.0.2 — PYSEC-2026-1845",
       "detail": "direct, CVSS 6.8, fixed in 9.0.3",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1845",
       "finding": "pytest:PYSEC-2026-1845",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.6 — PYSEC-2026-3554",
       "detail": "transitive, CVSS 6.9, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3554",
       "finding": "cryptography:PYSEC-2026-3554",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "idna 3.11 — PYSEC-2026-215",
       "detail": "transitive, CVSS 6.9, fixed in 3.15",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-215",
       "finding": "idna:PYSEC-2026-215",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-161",
       "detail": "transitive, CVSS 6.5, fixed in 1.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-161",
       "finding": "starlette:PYSEC-2026-161",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — GHSA-jq35-7prp-9v3f",
       "detail": "transitive, CVSS 5.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jq35-7prp-9v3f",
       "finding": "pyjwt:GHSA-jq35-7prp-9v3f",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pydantic-settings 2.13.1 — GHSA-4xgf-cpjx-pc3j",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xgf-cpjx-pc3j",
       "finding": "pydantic-settings:GHSA-4xgf-cpjx-pc3j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-178",
       "detail": "transitive, CVSS 5.3, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-178",
       "finding": "pyjwt:PYSEC-2026-178",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3038",
       "detail": "transitive, CVSS 5.3, fixed in 0.0.26",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3038",
       "finding": "python-multipart:PYSEC-2026-3038",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-2280",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2280",
       "finding": "starlette:PYSEC-2026-2280",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-248",
       "detail": "transitive, CVSS 5.3, fixed in 1.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-248",
       "finding": "starlette:PYSEC-2026-248",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-175",
       "detail": "transitive, CVSS 4.2, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-175",
       "finding": "pyjwt:PYSEC-2026-175",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-177",
       "detail": "transitive, CVSS 3.7, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-177",
       "finding": "pyjwt:PYSEC-2026-177",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3037",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3037",
       "finding": "python-multipart:PYSEC-2026-3037",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3040",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.31",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3040",
       "finding": "python-multipart:PYSEC-2026-3040",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.22 — PYSEC-2026-3041",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3041",
       "finding": "python-multipart:PYSEC-2026-3041",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.jolucashornung/live-translate-mcp",
   "version": "0.1.5",
   "slug": "io-github-jolucashornung-live-translate-mcp",
   "scanned_at": "2026-10-16T02:39:51+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/waxberry-dev/live-translate-mcp",
   "package": "npm:live-translate-mcp@0.1.5",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "8d4a4afd2e6996fdebd3774494558116f5502e53",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 45,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/binaries.ts",
       "line": 40,
       "excerpt": "function findOnPath(name: string): string | null {\n  try {\n    const result = execSync(`which ${name} 2>/dev/null`, { stdio: 'pipe' }).toString().trim();\n    return result || null;\n  } catch { return null; }",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/binaries.ts",
       "line": 40,
       "excerpt": "function findOnPath(name: string): string | null {\n  try {\n    const result = execSync(`which ${name} 2>/dev/null`, { stdio: 'pipe' }).toString().trim();\n    return result || null;\n  } catch { return null; }",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/binaries.ts",
       "line": 52,
       "excerpt": "    fs.writeFileSync(tmpFile, Buffer.from(await res.arrayBuffer()));\n    fs.mkdirSync(destDir, { recursive: true });\n    execSync(`tar -xzf ${JSON.stringify(tmpFile)} -C ${JSON.stringify(destDir)}`, { stdio: 'pipe' });\n  } finally {\n    fs.rmSync(tmpFile, { force: true });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/binaries.ts",
       "line": 52,
       "excerpt": "    fs.writeFileSync(tmpFile, Buffer.from(await res.arrayBuffer()));\n    fs.mkdirSync(destDir, { recursive: true });\n    execSync(`tar -xzf ${JSON.stringify(tmpFile)} -C ${JSON.stringify(destDir)}`, { stdio: 'pipe' });\n  } finally {\n    fs.rmSync(tmpFile, { force: true });",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/binaries.ts",
       "line": 48,
       "excerpt": "  const tmpFile = path.join(os.tmpdir(), `live-translate-bin-${Date.now()}.tar.gz`);\n  try {\n    const res = await fetch(url);\n    if (!res.ok) throw new Error(`HTTP ${res.status}`);\n    fs.writeFileSync(tmpFile, Buffer.from(await res.arrayBuffer()));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:80",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 32,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 121 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 128.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.jrullan/ducklab",
   "version": "0.7.0",
   "slug": "io-github-jrullan-ducklab",
   "scanned_at": "2026-10-16T02:39:56+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/jrullan/ducklab",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "6055099da51e3bb65be63c4b11ab0037badcf7dd",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 253,
   "files_pruned": 3,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 61,
     "reason": "3 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-go-shell-exec-interpreter (critical/medium)",
       "detail": "A shell interpreter is invoked with a constructed command string. Go's exec.Command is safe by default precisely because it takes an argument vector; routing through `sh -c` gives that safety away.",
       "path": "internal/xplat/xplat.go",
       "line": 157,
       "excerpt": "\t\tc = exec.Command(\"cmd\", \"/C\", cmd)\n\t} else {\n\t\tc = exec.Command(\"/bin/sh\", \"-c\", cmd)\n\t}\n\tc.Dir = workdir",
       "url": "",
       "finding": "mcp-go-shell-exec-interpreter",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "frontend/src/lib/colors.ts",
       "line": 189,
       "excerpt": "    // Past eight the palette stops clearing the colour-vision floor, so a ninth\n    // is muted rather than a colour that only looks distinct.\n    out[id] = slot <= SERIES_SLOTS ? `var(--series-${slot})` : \"var(--text-muted)\";\n    taken.add(slot);\n    slot++;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "frontend/src/views/Settings.tsx",
       "line": 300,
       "excerpt": "    const r: Record<string, string> = {};\n    for (const mode of Object.keys(v.script_rounds ?? {})) {\n      r[mode] = v.rounds[mode] ? String(v.rounds[mode]) : \"\";\n    }\n    setRounds(r);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "frontend/src/views/Settings.tsx",
       "line": 305,
       "excerpt": "    const rt: Record<string, string> = {};\n    for (const role of Object.keys(v.script_role_turns ?? {})) {\n      rt[role] = v.role_turns?.[role] ? String(v.role_turns[role]) : \"\";\n    }\n    setRoleTurns(rt);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/engineclt/engineclt.go",
       "line": 53,
       "excerpt": "\t\t\tbodyReader = bytes.NewReader(data)\n\t\t}\n\t\treq, err := http.NewRequest(method, c.BaseURL+path, bodyReader)\n\t\tif err != nil {\n\t\t\treturn nil, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/engineclt/engineclt.go",
       "line": 846,
       "excerpt": "\nfunc (c *Client) streamEvents(ctx context.Context, url string, fn func(SSEEvent) bool) error {\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", url, nil)\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/provider/openaicompat.go",
       "line": 144,
       "excerpt": "// silently running on a 32k default that starves a 200k model.\nfunc (p *OpenAICompat) ModelInfo(ctx context.Context, model string) (*ModelInfo, error) {\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", p.baseURL+\"/models\", nil)\n\tif err != nil {\n\t\treturn nil, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/provider/openaicompat.go",
       "line": 194,
       "excerpt": "\nfunc (p *OpenAICompat) Models(ctx context.Context) ([]string, error) {\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", p.baseURL+\"/models\", nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/provider/openaicompat.go",
       "line": 238,
       "excerpt": "\t\treturn ChatResponse{}, fmt.Errorf(\"marshal request: %w\", err)\n\t}\n\thttpReq, err := http.NewRequestWithContext(ctx, \"POST\", p.baseURL+\"/chat/completions\", strings.NewReader(string(body)))\n\tif err != nil {\n\t\treturn ChatResponse{}, fmt.Errorf(\"create request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/provider/openaicompat.go",
       "line": 410,
       "excerpt": "\t}\n\n\thttpReq, err := http.NewRequestWithContext(ctx, \"POST\", p.baseURL+\"/chat/completions\", strings.NewReader(string(body)))\n\tif err != nil {\n\t\treturn ChatResponse{}, fmt.Errorf(\"create request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/provider/openaicompat.go",
       "line": 781,
       "excerpt": "\t\treturn ChatResponse{}, fmt.Errorf(\"marshal request: %w\", err)\n\t}\n\thttpReq, err := http.NewRequestWithContext(ctx, \"POST\", p.baseURL+\"/v1/messages\", strings.NewReader(string(jsonBody)))\n\tif err != nil {\n\t\treturn ChatResponse{}, fmt.Errorf(\"create request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "internal/service/bugattach.go",
       "line": 56,
       "excerpt": "\t\treturn nil, err\n\t}\n\tif err := os.WriteFile(filepath.Join(dir, name), data, 0o644); err != nil {\n\t\treturn nil, err\n\t}",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "internal/service/bugattach.go",
       "line": 116,
       "excerpt": "\t\t\tcontinue\n\t\t}\n\t\tdata, err := os.ReadFile(filepath.Join(attachmentsDir(projectPath, bugID), name))\n\t\tif err != nil {\n\t\t\tcontinue",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "internal/service/release.go",
       "line": 590,
       "excerpt": "\t\t\tcontinue\n\t\t}\n\t\tbody, err := os.ReadFile(filepath.Join(release.Dir(entry.Path), n.Name()))\n\t\tif err != nil {\n\t\t\tcontinue",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "internal/service/review.go",
       "line": 291,
       "excerpt": "\t\t\tcontinue\n\t\t}\n\t\tbody, err := os.ReadFile(filepath.Join(review.Dir(entry.Path), n.Name()))\n\t\tif err != nil {\n\t\t\tcontinue",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "internal/service/runview.go",
       "line": 137,
       "excerpt": "\t\t\tcontinue\n\t\t}\n\t\tdata, err := os.ReadFile(filepath.Join(candDir, e.Name()))\n\t\tif err != nil {\n\t\t\tcontinue",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "internal/service/runview.go",
       "line": 164,
       "excerpt": "\t\treturn \"\", fmt.Errorf(\"run %q not found\", id)\n\t}\n\tdata, err := os.ReadFile(filepath.Join(dir, name))\n\tif err != nil {\n\t\tif os.IsNotExist(err) {",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "internal/service/scorecard.go",
       "line": 153,
       "excerpt": "\t\t\t\tcontinue\n\t\t\t}\n\t\t\traw, e := os.ReadFile(filepath.Join(root, sd.Name(), f.Name()))\n\t\t\tif e != nil {\n\t\t\t\tcontinue",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 16 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at cmd/ducklab-desktop/frontend/dist/assets/index-ls-N76SS.js:57; Hex High Entropy String at cmd/fake-engine/main.go:409; Secret Keyword at docs/spec/02-DATA-MODEL.md:130; Secret Keyword at docs/spec/02-DATA-MODEL.md:140; Secret Keyword at docs/spec/02-DATA-MODEL.md:146; Base64 High Entropy String at frontend/src/lib/attention.ts:103; Hex High Entropy String at frontend/src/lib/format.test.ts:50; Hex High Entropy String at frontend/src/lib/runview.test.ts:666; Secret Keyword at frontend/src/views/ducklings.test.tsx:40; Hex High Entropy String at frontend/src/views/views.test.tsx:58; …and 6 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (4 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 37 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 14,
     "reason": "1 vulnerability could not be placed in `03` §6's table and is listed but not scored",
     "assessed_weight": "0.92",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "vitest 2.1.9 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 3.2.6",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tinypool 1.1.1 — GHSA-5gmw-xhrv-c9v3",
       "detail": "transitive, CVSS 9.5, fixed in 2.1.1",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5gmw-xhrv-c9v3",
       "finding": "tinypool:GHSA-5gmw-xhrv-c9v3",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "tinypool 1.1.1 — GHSA-85c8-ppgw-ccpr",
       "detail": "transitive, CVSS 9.5, fixed in 2.1.2",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-85c8-ppgw-ccpr",
       "finding": "tinypool:GHSA-85c8-ppgw-ccpr",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-fx2h-pf6j-xcff",
       "detail": "direct, CVSS 8.2, fixed in 6.4.3",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.16 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-4w7w-66w2-5vf9",
       "detail": "direct, CVSS 6.3, fixed in 6.4.2",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4w7w-66w2-5vf9",
       "finding": "vite:GHSA-4w7w-66w2-5vf9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 2.1.9 — GHSA-82fw-gwwq-j7x9",
       "detail": "direct, CVSS 5.9, fixed in 4.1.11",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "vitest:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-v6wh-96g9-6wx3",
       "detail": "direct, CVSS 5.5, fixed in 6.4.3",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v6wh-96g9-6wx3",
       "finding": "vite:GHSA-v6wh-96g9-6wx3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@vitest/mocker 2.1.9 — GHSA-82fw-gwwq-j7x9",
       "detail": "transitive, CVSS 5.9, fixed in 4.1.11",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-82fw-gwwq-j7x9",
       "finding": "@vitest/mocker:GHSA-82fw-gwwq-j7x9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss-selector-parser 6.1.4 — GHSA-rj75-hqrm-r3gf",
       "detail": "transitive, CVSS 5.9, fixed in 7.1.6",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rj75-hqrm-r3gf",
       "finding": "postcss-selector-parser:GHSA-rj75-hqrm-r3gf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.21.5 — GHSA-67mh-4wv8-2f99",
       "detail": "transitive, CVSS 5.3, fixed in 0.25.0",
       "path": "frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-67mh-4wv8-2f99",
       "finding": "esbuild:GHSA-67mh-4wv8-2f99",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "golang.org/x/sys 0.43.0 — GO-2026-5024",
       "detail": "transitive, no CVSS published, fixed in 0.44.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5024",
       "finding": "golang.org/x/sys:GO-2026-5024",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.korobkov-v/porkbun-mcp",
   "version": "0.3.4",
   "slug": "io-github-korobkov-v-porkbun-mcp",
   "scanned_at": "2026-10-16T02:40:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/korobkov-v/porkbun-mcp",
   "package": "npm:porkbun-mcp@0.3.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "71fc25fffb62b0ceb2b245b1288886826b64b41a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:86; Secret Keyword at README.md:87",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 242 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 24.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.kylastech/kylas-crm",
   "version": "1.0.4",
   "slug": "io-github-kylastech-kylas-crm",
   "scanned_at": "2026-10-16T02:40:12+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/kylastech/kylas-crm-mcp-server",
   "package": "pypi:kylas-crm-mcp-server@1.0.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (KYLAS_API_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "14 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 249 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (2 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.kyrylopr/lenspr",
   "version": "0.1.1",
   "slug": "io-github-kyrylopr-lenspr",
   "scanned_at": "2026-10-16T02:40:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/kyrylopr/lenspr",
   "package": "pypi:lenspr@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 55,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "lenspr/database.py",
       "line": 160,
       "excerpt": "    for col_name, col_type in annotation_columns:\n        if col_name not in columns:\n            conn.execute(f\"ALTER TABLE nodes ADD COLUMN {col_name} {col_type}\")\n\ndef _migrate_history(conn: sqlite3.Connection) -> None:",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "lenspr/database.py",
       "line": 354,
       "excerpt": "        if deleted_ids:\n            placeholders = \",\".join(\"?\" * len(deleted_ids))\n            conn.execute(\n                f\"DELETE FROM edges WHERE to_node IN ({placeholders})\",\n                list(deleted_ids),",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "lenspr/database.py",
       "line": 362,
       "excerpt": "        if deleted_ids:\n            placeholders = \",\".join(\"?\" * len(deleted_ids))\n            conn.execute(\n                f\"DELETE FROM nodes WHERE id IN ({placeholders})\",\n                list(deleted_ids),",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 7 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at tests/test_helpers.py:138; Secret Keyword at tests/test_helpers.py:139; Secret Keyword at tests/test_helpers.py:140; Secret Keyword at tests/test_helpers.py:142; Secret Keyword at tests/test_helpers.py:144; Secret Keyword at tests/test_infra_mapper.py:172; Secret Keyword at tests/test_safety.py:33",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 52,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 234 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 235 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.lazymac2x/citation-verifier",
   "version": "1.0.0",
   "slug": "io-github-lazymac2x-citation-verifier",
   "scanned_at": "2026-10-16T02:40:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/lazymac2x/citation-verifier-api",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "cfa10c40badb38df7ff53e48b6f36cc38b80654a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.lazy-mac.com/citation-verifier/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 152 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md is under `03` §7's 500-byte floor, which scores 0 regardless of content",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.lchampz/heimdall",
   "version": "1.0.1",
   "slug": "io-github-lchampz-heimdall",
   "scanned_at": "2026-10-16T02:40:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/lchampz/mcp-heimdall",
   "package": "npm:@lchampz/mcp-heimdall@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "b568d0d1a06f6a6098ad28c94d406306a5fe3bba",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 13,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 40,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/tools/inspect_runtime_versions.ts",
       "line": 12,
       "excerpt": "    const runCommand = (cmd: string): string => {\n        try {\n            return execSync(cmd, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().trim();\n        } catch {\n            return \"not_found\";",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/tools/manage_ports.ts",
       "line": 41,
       "excerpt": "    try {\n        \n        const pidOutput = execSync(`lsof -t -i:${port}`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().trim();\n\n        if (!pidOutput) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/tools/manage_ports.ts",
       "line": 41,
       "excerpt": "    try {\n        \n        const pidOutput = execSync(`lsof -t -i:${port}`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().trim();\n\n        if (!pidOutput) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/tools/manage_ports.ts",
       "line": 52,
       "excerpt": "        const pids = pidOutput.split(\"\\n\");\n        for (const pid of pids) {\n            execSync(`kill -9 ${pid}`);\n        }\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/tools/manage_ports.ts",
       "line": 52,
       "excerpt": "        const pids = pidOutput.split(\"\\n\");\n        for (const pid of pids) {\n            execSync(`kill -9 ${pid}`);\n        }\n",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/tools/path_inspector.ts",
       "line": 12,
       "excerpt": "    criticalTools.forEach(tool => {\n        try {\n            const version = execSync(`${tool} --version`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().split(\"\\n\")[0];\n            const location = execSync(`which ${tool}`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().trim();\n            const isSystem = location.startsWith(\"/usr/bin\");",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/tools/path_inspector.ts",
       "line": 12,
       "excerpt": "    criticalTools.forEach(tool => {\n        try {\n            const version = execSync(`${tool} --version`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().split(\"\\n\")[0];\n            const location = execSync(`which ${tool}`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().trim();\n            const isSystem = location.startsWith(\"/usr/bin\");",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/tools/path_inspector.ts",
       "line": 13,
       "excerpt": "        try {\n            const version = execSync(`${tool} --version`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().split(\"\\n\")[0];\n            const location = execSync(`which ${tool}`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().trim();\n            const isSystem = location.startsWith(\"/usr/bin\");\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/tools/path_inspector.ts",
       "line": 13,
       "excerpt": "        try {\n            const version = execSync(`${tool} --version`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().split(\"\\n\")[0];\n            const location = execSync(`which ${tool}`, { stdio: [\"pipe\", \"pipe\", \"ignore\"] }).toString().trim();\n            const isSystem = location.startsWith(\"/usr/bin\");\n",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 29 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ldclabs/KIP",
   "version": "1.0.1",
   "slug": "io-github-ldclabs-kip",
   "scanned_at": "2026-10-16T02:40:24+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ldclabs/KIP",
   "package": "npm:@ldclabs/kip-mcp-server@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "a834eff784a8b1ce800ecd2a2fc3f6150233edac",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 40,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "conformance/engine-runner.mjs",
       "line": 37,
       "excerpt": "    for (const key of Object.keys(value).sort()) {\n      if (VOLATILE.has(key)) continue\n      out[key] = normalize(value[key], tagOf, seen)\n    }\n    return out",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "conformance/engine-runner.mjs",
       "line": 106,
       "excerpt": " */\nexport function caseRequest(testCase, parameters = {}) {\n  if (!testCase.operations) return request(testCase.command, { ...parameters, ...testCase.params }, testCase.envelope ?? {})\n  return {\n    kip: '2.0',",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "conformance/engine-runner.mjs",
       "line": 130,
       "excerpt": "      for (const setup of fixture.setup ?? []) {\n        const step = typeof setup === 'string' ? { command: setup } : setup\n        const outcome = flatten(await adapter.execute(request(step.command, { ...parameters, ...step.params })))\n        if (outcome.error) throw new Error(`setup failed with ${outcome.error.code}: ${outcome.error.message}`)\n        // Capture raw read values, including the engine's actual basis. Never",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "v1/mcp/kip-mcp-server/src/services/kipClient.ts",
       "line": 40,
       "excerpt": "\n  try {\n    const res = await fetch(opts.baseUrl, {\n      method: 'POST',\n      headers: getHeaders(opts),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "v1/skill/kip-cognitive-nexus/scripts/execute_kip.py",
       "line": 105,
       "excerpt": "\n    try:\n        with urlopen(req, timeout=TIMEOUT_SECONDS) as response:\n            response_body = response.read().decode(\"utf-8\")\n            return json.loads(response_body)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:52",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 7 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (6 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 7 days (by releases), last release 47 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.letoribo/mcp-graphql-enhanced",
   "version": "4.15.4",
   "slug": "io-github-letoribo-mcp-graphql-enhanced",
   "scanned_at": "2026-10-16T02:40:31+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/letoribo/mcp-graphql-enhanced",
   "package": "npm:@letoribo/mcp-graphql-enhanced@4.15.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "60ff155f0e44d17d58d00229786a5c7d100f1a6d",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 10,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 82,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/helpers/introspection.ts",
       "line": 102,
       "excerpt": "    \n    if (rootField) {\n      result[name] = {\n        kind: queryFields[name] ? \"QUERY_FIELD\" : \"MUTATION_FIELD\",\n        description: rootField.description,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/helpers/introspection.ts",
       "line": 131,
       "excerpt": "        });\n\n      result[name] = {\n        kind: isInterfaceType(type) ? \"INTERFACE\" : \"OBJECT\",\n        description: type.description,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/helpers/introspection.ts",
       "line": 137,
       "excerpt": "      };\n    } else if (isInputObjectType(type)) {\n      result[name] = {\n        kind: \"INPUT_OBJECT\",\n        description: type.description,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/helpers/introspection.ts",
       "line": 149,
       "excerpt": "      };\n    } else if (isEnumType(type)) {\n      result[name] = {\n        kind: \"ENUM\",\n        description: type.description,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/helpers/introspection.ts",
       "line": 158,
       "excerpt": "      };\n    } else if (isUnionType(type)) {\n      result[name] = {\n        kind: \"UNION\",\n        description: type.description,",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/helpers/introspection.ts",
       "line": 164,
       "excerpt": "      };\n    } else if (isScalarType(type)) {\n      result[name] = {\n        kind: \"SCALAR\",\n        description: type.description",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/helpers/introspection.ts",
       "line": 171,
       "excerpt": "      // FIX: Fallback for types that weren't caught by the explicit checks\n      // This ensures ProxyInfo and other \"flat\" objects are reported\n      result[name] = {\n        kind: \"OBJECT\",\n        description: (type as any).description || \"\",",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/index.ts",
       "line": 705,
       "excerpt": "\n        if (variants.length === 1) {\n            resolution[name] = variants[0].data;\n        } else {\n            const baseline = JSON.stringify(variants[0].data);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/index.ts",
       "line": 711,
       "excerpt": "\n            if (allMatch) {\n                resolution[name] = variants[0].data;\n            } else {\n                variants.forEach((v, idx) => {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/helpers/introspection.ts",
       "line": 23,
       "excerpt": "  typeDepth: number = 2\n) {\n  const response = await fetch(endpoint, {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\", ...headers },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 184,
       "excerpt": "            let sdl: string;\n            if (env.SCHEMA.startsWith(\"http\")) {\n                const response = await fetch(env.SCHEMA);\n                if (!response.ok) throw new Error(`Remote_SDL_Fetch_Failed: ${response.statusText}`);\n                sdl = await response.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 225,
       "excerpt": "\n                            // 1. Attempt POST request\n                            let res = await fetch(url, {\n                                method: \"POST\",\n                                headers: cleanHeaders,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 235,
       "excerpt": "                                console.warn(`[SYNC-WARN] POST returned HTTP ${res.status} from ${url}. Retrying with GET fallback...`);\n                                const getUrl = `${url}?query=${encodeURIComponent(queryStr.replace(/\\s+/g, ' ').trim())}`;\n                                res = await fetch(getUrl, {\n                                    method: \"GET\",\n                                    headers: { \"Accept\": \"application/json\" }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 470,
       "excerpt": "                for (let attempt = 0; attempt < 2; attempt++) {\n                    try {\n                        response = await fetch(url, {\n                            method: \"POST\",\n                            headers: cleanHeaders,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 489,
       "excerpt": "                            }\n\n                            response = await fetch(getUrl, {\n                                method: \"GET\",\n                                headers: { ",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 92,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 1.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 7 days (by releases), last release 35 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 49,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "capabilities are described only in vague terms — `03` §7's 30 band, which needs no inference to establish",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.levelsofself/ai-ops",
   "version": "1.0.1",
   "slug": "io-github-levelsofself-ai-ops",
   "scanned_at": "2026-10-16T02:40:35+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/levelsofself/mcp-ops-server",
   "package": "npm:palyan-ai-ops-mcp-server@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 93 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.lexbritten/probe",
   "version": "0.1.0",
   "slug": "io-github-lexbritten-probe",
   "scanned_at": "2026-10-16T02:40:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/lexbritten/probe-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "4958606c726e42a63e6f288a50675d028ef85b3b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://probe-evidence.probe-lab.workers.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 45 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.lgpoliveira/bugiadata-mcp",
   "version": "1.0.0",
   "slug": "io-github-lgpoliveira-bugiadata-mcp",
   "scanned_at": "2026-10-16T02:40:39+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/lgpoliveira/bugiadata-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "sse",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "6d633e10586cfb1ca31af09ab1c73f9cd03c9257",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.bugiadata.com/sse; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 111 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.liminalpepe/x402-dataviz-mcp",
   "version": "0.1.0",
   "slug": "io-github-liminalpepe-x402-dataviz-mcp",
   "scanned_at": "2026-10-16T02:40:41+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/liminalpepe/x402-dataviz-mcp",
   "package": "npm:x402-dataviz-mcp@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "1e13f8c4e6201f57a84a05911e40c5fe1688d064",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 75 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.linhnnmt/genai-capture",
   "version": "1.0.1",
   "slug": "io-github-linhnnmt-genai-capture",
   "scanned_at": "2026-10-16T02:40:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/projecthsf/genai-capture",
   "package": "npm:genai-capture-mcp@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 75 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 87 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 26,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'Apache-2.0' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.lizhuojunx86/chinese-history-mcp",
   "version": "0.3.0",
   "slug": "io-github-lizhuojunx86-chinese-history-mcp",
   "scanned_at": "2026-10-16T02:40:46+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/lizhuojunx86/chinese-history-mcp",
   "package": "pypi:chinese-history-mcp@0.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 10,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/storyextractor/db.py",
       "line": 639,
       "excerpt": "def _add_column(conn: sqlite3.Connection, table: str, col: str, decl: str) -> None:\n    \"\"\"Idempotent ALTER ADD COLUMN (SQLite errors if a column is added twice).\"\"\"\n    existing = {r[1] for r in conn.execute(f\"PRAGMA table_info({table})\")}\n    if col not in existing:\n        conn.execute(f\"ALTER TABLE {table} ADD COLUMN {col} {decl}\")",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/storyextractor/db.py",
       "line": 641,
       "excerpt": "    existing = {r[1] for r in conn.execute(f\"PRAGMA table_info({table})\")}\n    if col not in existing:\n        conn.execute(f\"ALTER TABLE {table} ADD COLUMN {col} {decl}\")\n\n",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/storyextractor/db.py",
       "line": 847,
       "excerpt": "        if version < ver:\n            fn(conn)\n            conn.execute(f\"PRAGMA user_version = {ver}\")   # ver 为内部 int 常量, 无注入风险\n    conn.commit()\n",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/storyextractor/mcp/queries.py",
       "line": 110,
       "excerpt": "                     \"WHERE es.event_id=e.id AND b.slug=?)\")\n        params.append(book)\n    total = conn.execute(\n        f\"SELECT COUNT(*) FROM events e WHERE {' AND '.join(where)}\", params).fetchone()[0]\n    rows = conn.execute(",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/storyextractor/mcp/queries.py",
       "line": 157,
       "excerpt": "    返回 (row, candidates)。candidates 非空 = 需消歧 (同名异指 / 多人共用一别名)。\n    整词匹配杜绝 '霸'→西楚霸王 一类子串误配; 命中>1 时不静默 LIMIT 1 任意取。\"\"\"\n    exact = conn.execute(\n        f\"SELECT {_ENTITY_COLS} FROM entities WHERE name=? OR slug=?\", (name, name)).fetchall()\n    if len(exact) == 1:",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 74 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.malamutemayhem/hackernews",
   "version": "0.1.0",
   "slug": "io-github-malamutemayhem-hackernews",
   "scanned_at": "2026-10-16T02:40:49+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/malamutemayhem/unclick.git",
   "package": "npm:@unclick/hackernews-mcp@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "2374b85b1065fbfa522debde5f5704ac317a85d4",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 32 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 0 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 112 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.malamutemayhem/ptv",
   "version": "0.1.0",
   "slug": "io-github-malamutemayhem-ptv",
   "scanned_at": "2026-10-16T02:40:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/malamutemayhem/unclick.git",
   "package": "npm:@unclick/ptv-mcp@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "2374b85b1065fbfa522debde5f5704ac317a85d4",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ptv-tool.ts",
       "line": 34,
       "excerpt": "async function ptvFetch(path: string, params: Record<string, string> = {}): Promise<unknown> {\n  const url = buildPtvUrl(path, params);\n  const res = await fetch(url, {\n    headers: { \"User-Agent\": \"UnClickMCP/1.0 (https://unclick.io)\" },\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 32 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 0 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 112 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.marcelo-ochoa/mikrotik",
   "version": "1.0.6",
   "slug": "io-github-marcelo-ochoa-mikrotik",
   "scanned_at": "2026-10-16T02:41:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/marcelo-ochoa/servers",
   "package": "npm:@marcelo-ochoa/server-mikrotik@1.0.6",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "tools/report.ts",
       "line": 44,
       "excerpt": "                try {\n                    const trafficReplies = await currentApi.talk([\"/interface/monitor-traffic\", `=interface=${name}`, \"=once=\"]);\n                    report.traffic[name] = trafficReplies.filter(r => r.command === \"!re\").map(r => r.attributes)[0] || {};\n                } catch (e) {\n                    report.traffic[name] = \"Error: \" + (e as Error).message;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "tools/report.ts",
       "line": 46,
       "excerpt": "                    report.traffic[name] = trafficReplies.filter(r => r.command === \"!re\").map(r => r.attributes)[0] || {};\n                } catch (e) {\n                    report.traffic[name] = \"Error: \" + (e as Error).message;\n                }\n            }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at Demos.md:112; Secret Keyword at README.md:97",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "1 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 60,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 56 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release in 570 days (by releases) — over a year",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 64,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/crcp_certificado-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-crcp-certificado-mcp",
   "scanned_at": "2026-10-16T02:41:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/crcp_certificado-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "31e3a84ed2a748da204d429ce7fe1d96d6cdafea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_crcp_certificado; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/ecrvsp_docs_dados_cadastrais-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-ecrvsp-docs-dados-cadastrais-mcp",
   "scanned_at": "2026-10-16T02:41:05+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/ecrvsp_docs_dados_cadastrais-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "6aac026157b00ffe264ae2476493b517c096446c",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_ecrvsp_docs_dados_cadastrais; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/ecrvsp_processos_crlve-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-ecrvsp-processos-crlve-mcp",
   "scanned_at": "2026-10-16T02:41:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/ecrvsp_processos_crlve-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "860cf0d41b700e4597bdd76b23300388924262b3",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_ecrvsp_processos_crlve; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/ibama_regularidade-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-ibama-regularidade-mcp",
   "scanned_at": "2026-10-16T02:41:09+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/ibama_regularidade-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "abbbef65b558ad3b2cfb8e2879d9f6a36a4a2909",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_ibama_regularidade; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 62 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/mpt_cnf_unificada-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-mpt-cnf-unificada-mcp",
   "scanned_at": "2026-10-16T02:41:11+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/mpt_cnf_unificada-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "e07a6e41b57c68eded51d637c6dea21eb6b83942",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_mpt_cnf_unificada; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/mpt_ms_cnf-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-mpt-ms-cnf-mcp",
   "scanned_at": "2026-10-16T02:41:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/mpt_ms_cnf-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "e9b553ca05704b5125cc6a0df6f156e26d12de99",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_mpt_ms_cnf; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/pref_mg_itauna_cnd-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-pref-mg-itauna-cnd-mcp",
   "scanned_at": "2026-10-16T02:41:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/pref_mg_itauna_cnd-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "7ff882f7de37196cb7d275d6ecefc8c224577c21",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_pref_mg_itauna_cnd; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/pref_pr_curitiba_cnd-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-pref-pr-curitiba-cnd-mcp",
   "scanned_at": "2026-10-16T02:41:17+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/pref_pr_curitiba_cnd-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "19d307c66b2b13777863d7af96fd525dff71f010",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_pref_pr_curitiba_cnd; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/pref_rs_montenegro_cnd-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-pref-rs-montenegro-cnd-mcp",
   "scanned_at": "2026-10-16T02:41:19+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/pref_rs_montenegro_cnd-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "40939f35723c6359d1bda19b55e211b71990c6f2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_pref_rs_montenegro_cnd; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/pref_se_laranjeiras_cnd-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-pref-se-laranjeiras-cnd-mcp",
   "scanned_at": "2026-10-16T02:41:21+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/pref_se_laranjeiras_cnd-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "6bc62d70503ca3ca8e1249d5f9da2a265de94acf",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_pref_se_laranjeiras_cnd; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 57 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/registro_pf_br-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-registro-pf-br-mcp",
   "scanned_at": "2026-10-16T02:41:24+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/registro_pf_br-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "8d374c3d68cd882ddfc4e997030bd201e535a723",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_registro_pf_br; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 62 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/sefaz_mg_parcelamento-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-sefaz-mg-parcelamento-mcp",
   "scanned_at": "2026-10-16T02:41:26+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/sefaz_mg_parcelamento-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "41916b546fb4fe711600b77ba6567ebcb2c1b600",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_sefaz_mg_parcelamento; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 58 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/sintegra-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-sintegra-mcp",
   "scanned_at": "2026-10-16T02:41:28+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/sintegra-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "183b73cbc879f167f4ff91703a63dfc2dd61e1e2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_sintegra; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 62 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/transparencia_indicadores_pj-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-transparencia-indicadores-pj-mcp",
   "scanned_at": "2026-10-16T02:41:30+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/transparencia_indicadores_pj-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "66885d712543f6a381c6609f6d59a5401ac47326",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_transparencia_indicadores_pj; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 62 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/tribunal_tjsp_pedido_criminal-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-tribunal-tjsp-pedido-criminal-mcp",
   "scanned_at": "2026-10-16T02:41:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/tribunal_tjsp_pedido_criminal-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "3fe0b90492df7e5a52491588a7b64a65038e5b20",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_tribunal_tjsp_pedido_criminal; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 58 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mcp-dir/veiculo_historico-mcp",
   "version": "0.1.0",
   "slug": "io-github-mcp-dir-veiculo-historico-mcp",
   "scanned_at": "2026-10-16T02:41:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mcp-dir/veiculo_historico-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "7db4b2aca9107dbe50021bcdef54932bb5adde76",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.mcp.ai/p_veiculo_historico; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 62 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 48,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mharnett/reddit-ads",
   "version": "1.0.1",
   "slug": "io-github-mharnett-reddit-ads",
   "scanned_at": "2026-10-16T02:41:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/mharnett/mcp-reddit-ads",
   "package": "npm:mcp-reddit-ads@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "55f2f3c6bc45f80d25de9afdf9437400a268d351",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/resilience.ts",
       "line": 67,
       "excerpt": "      for (const key of [\"items\", \"results\", \"data\", \"rows\", \"tags\", \"triggers\", \"variables\"]) {\n        if (Array.isArray(obj[key]) && obj[key].length > 1) {\n          obj[key] = obj[key].slice(0, Math.max(1, Math.floor(obj[key].length * 0.5)));\n          if (\"count\" in obj) obj.count = obj[key].length;\n          if (\"row_count\" in obj) obj.row_count = obj[key].length;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 242,
       "excerpt": "    }\n\n    const resp = await fetch(url, {\n      method,\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 73,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 37 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 76 days (by releases), last release 43 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.milos106/ares-mcp",
   "version": "0.1.2",
   "slug": "io-github-milos106-ares-mcp",
   "scanned_at": "2026-10-16T02:41:40+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/milos106/ares-mcp",
   "package": "npm:@milos106/ares-mcp@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "6f8a60fb5ba5bc141db3568562156128dddc471c",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 40,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/verify-provenance.mjs",
       "line": 84,
       "excerpt": "\n  const jwks = /^https?:\\/\\//.test(jwksRef)\n    ? await (await fetch(jwksRef)).json()\n    : JSON.parse(fs.readFileSync(jwksRef, \"utf8\"));\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 113 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mister-franklin/gdpr-decisions",
   "version": "0.1.2",
   "slug": "io-github-mister-franklin-gdpr-decisions",
   "scanned_at": "2026-10-16T02:41:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/mister-franklin/mcp-gdpr-decisions",
   "package": "pypi:mcp-server-gdpr-decisions@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.4",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "network transport, and no authentication middleware, credential-header read, or inbound token verification appears anywhere in the source we fetched — `03` §4's \"no authentication; HTTP transport\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "transport is streamable-http but the entry declares no endpoint URL to read a scheme from",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:70; Secret Keyword at README.md:43",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 150 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mister-franklin/wetwetwet-legislation",
   "version": "0.1.0",
   "slug": "io-github-mister-franklin-wetwetwet-legislation",
   "scanned_at": "2026-10-16T02:41:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mister-franklin/mcp-wetwetwet",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://wetwetwet.be/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/mister-franklin/mcp-wetwetwet) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.moelayyan90/xguard",
   "version": "0.6.2",
   "slug": "io-github-moelayyan90-xguard",
   "scanned_at": "2026-10-16T02:41:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/moelayyan90/XGuard",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "91c23ae6c34b54dc6de446bb36769d39f36f2cc0",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 128,
   "files_pruned": 12,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 6,
     "reason": "12 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 15,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "apps/relay/src/core/network-policy.js",
       "line": 39,
       "excerpt": "  if (!host || host.length > 253 || host === \"localhost\" || !host.includes(\".\")) return false;\n  if (host.endsWith(\".local\") || host.endsWith(\".internal\") || host.endsWith(\".localhost\") || host.endsWith(\".home\") || host.endsWith(\".lan\")) return false;\n  if (host === \"metadata.google.internal\" || host === \"metadata.azure.internal\" || host.endsWith(\".xguardgate.com\") || host === \"xguardgate.com\") return false;\n  if (isPrivateIpv4(host) || isPrivateIpv6(host)) return false;\n  return true;",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": "apps/relay/src/execution-first-test.js",
       "line": 143,
       "excerpt": "    const html = await response.text(); const { document } = parseHTML(html);\n    assert.ok(document.querySelector('link[rel=\"canonical\"]'));\n    for (const script of document.querySelectorAll(\"script\")) { assert.doesNotThrow(() => new Function(script.textContent)); assert.ok(script.getAttribute(\"nonce\")); }\n    assert.doesNotMatch(html, /localStorage|sessionStorage|\\.innerHTML\\s*=/);\n  }",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "apps/relay/src/paid-agent-entry-test.js",
       "line": 216,
       "excerpt": "    \"https://127.0.0.1/\",\n    \"https://10.0.0.1/\",\n    \"https://169.254.169.254/latest/meta-data/\",\n    \"https://[::1]/\",\n    \"https://[::ffff:127.0.0.1]/\",",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "apps/relay/src/paid-agent-entry-test.js",
       "line": 219,
       "excerpt": "    \"https://[::1]/\",\n    \"https://[::ffff:127.0.0.1]/\",\n    \"https://metadata.google.internal/\",\n    \"https://api.xguardgate.com/identity\",\n    \"https://localhost/\",",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "apps/relay/src/paid-agent-entry-test.js",
       "line": 313,
       "excerpt": "    method: \"POST\",\n    headers: { \"content-type\": \"application/json\" },\n    body: JSON.stringify({ url: \"https://169.254.169.254/latest/meta-data/\", testnet: true }),\n  }), env, {});\n  assert.equal(response.status, 403);",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 274,
       "excerpt": "\ntest('Seller origin and path policy reject private destinations, encoded traversal and query credentials', () => {\n  for (const target of ['https://127.0.0.1/', 'https://169.254.169.254/', 'https://api.xguardgate.com/', 'https://example.com/?key=secret', 'https://user:pass@example.com/']) assert.throws(() => safeSellerBase(target));\n  for (const path of ['/../private', '/%252e%252e/private', '//other.com/', '/a%2fb', '/a\\\\b']) assert.throws(() => safeSellerPath(path));\n});",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/relay/src/a2a-entry.js",
       "line": 250,
       "excerpt": "    for (const name of [\"payment-required\", \"payment-response\", \"x-xguard-quote\", \"x-xguard-payment-environment\", \"x-xguard-payment-rail\", \"x-xguard-payment-identifier\", \"x-xguard-replay\", \"x-xguard-proof\", \"x-xguard-receipt\"]) {\n      const header = paid.headers.get(name);\n      if (header) exposed[name] = header;\n    }\n    const state = paid.status === 402 ? \"INPUT_REQUIRED\" : paid.ok ? \"COMPLETED\" : \"FAILED\";",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/relay/src/core/payment-context.js",
       "line": 33,
       "excerpt": "  for (const key of [\"paymentPayload\", \"payment_payload\", \"payment\", \"payload\"]) {\n    if (typeof body[key] !== \"string\") continue;\n    try { body[key] = decodePaymentSignatureHeader(body[key]); }\n    catch { return block(\"invalid_payment_payload\", { field: key, expected: \"full payment object or base64-encoded x402 Payment-Signature payload\" }); }\n    normalizations.push(\"encoded_payment_envelope\");",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/relay/src/outcome-catalog.js",
       "line": 181,
       "excerpt": "    for (const key of [\"capability\", \"sources\", \"urls\", \"url\", \"html\", \"action\", \"limit\", \"max_age_seconds\", \"query\", \"testnet\"]) {\n      if (raw[key] !== undefined && inside[key] !== undefined && !same(raw[key], inside[key])) return invalid(\"ambiguous_intent\", `Conflicting ${key} values.`);\n      if (raw[key] !== undefined) merged[key] = raw[key];\n    }\n    if (typeof raw.intent === \"string\") {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/relay/src/paid-agent-entry.js",
       "line": 712,
       "excerpt": "      if (!Object.hasOwn(raw, key)) continue;\n      if (Object.hasOwn(source, key) && source[key] !== raw[key]) issues.push({ path: key, code: \"conflicting_values\", message: `The outer ${key} conflicts with its input envelope.` });\n      else source[key] = raw[key];\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/relay/src/paid-agent-entry.js",
       "line": 2415,
       "excerpt": "    for (const name of [\"payment-response\", \"x-xguard-request-id\", \"x-xguard-payment-identifier\", \"x-xguard-replay\", \"x-xguard-proof\", \"x-xguard-receipt\"]) {\n      const value = paid.headers.get(name);\n      if (value) exposed[name] = value;\n    }\n    return mcpTransportResponse(mcpEnvelope(message.id, value, exposed), message);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/edge-gate/src/index.js",
       "line": 175,
       "excerpt": "  if (cached && cached.expiresAt > now) return cached.rules;\n\n  const response = await fetch(target, {\n    headers: { accept: \"application/json\" },\n    redirect: \"error\",",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/edge-gate/src/index.js",
       "line": 198,
       "excerpt": "async function proxyToOrigin(request, env) {\n  const target = originUrlFor(request.url, env);\n  const upstream = await fetch(new Request(target, request));\n  const headers = new Headers(upstream.headers);\n  headers.set(\"x-xguard-edge-gate\", \"enforced\");",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/action-rail.js",
       "line": 370,
       "excerpt": "  let upstream;\n  try {\n    upstream = await fetch(String(permit.target), {\n      method: String(permit.method || \"POST\").toUpperCase(),\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/agent-token-usage.js",
       "line": 28,
       "excerpt": "    // Workers supports manual/follow, not redirect:error. Never forward the key\n    // to a redirected origin; non-2xx replies below fail authentication closed.\n    response = await fetch(url.href, { method: \"GET\", redirect: \"manual\", signal: AbortSignal.timeout(5000), headers: { authorization: `Bearer ${key}`, accept: \"application/json\" } });\n    // Never treat arbitrary HTTP 200 pages or an incomplete reply as authentication.\n    const parsed = await readPublicJson(response, MAX_USAGE_BYTES);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/core/network-policy.js",
       "line": 61,
       "excerpt": "        endpoint.searchParams.set(\"name\", hostname);\n        endpoint.searchParams.set(\"type\", type);\n        const response = await fetch(endpoint, { headers: { accept: resolver.accept }, signal: AbortSignal.timeout(Math.min(8000, Math.max(1000, timeoutMs))), redirect: \"follow\" });\n        if (!response.ok || !resolver.hosts.has(new URL(response.url || endpoint).hostname)) throw new Error(\"dns_resolver_unavailable\");\n        const candidate = await response.json().catch(() => null);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/core/reconcile-payment.js",
       "line": 19,
       "excerpt": "  try {\n    await Promise.any(reconciliationRpcUrls(env).map(async endpoint => {\n      const response = await fetch(endpoint, { method: \"POST\", headers: { \"content-type\": \"application/json\" }, body: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method: \"eth_chainId\", params: [] }), redirect: \"manual\", signal: AbortSignal.timeout(2000) });\n      if (!response.ok || (await response.json()).result !== \"0x2105\") throw new Error(\"rpc_chain_unavailable\");\n    }));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/outcome-http-test.js",
       "line": 100,
       "excerpt": "      validAfter: \"0\", validBefore: String(Math.floor(Date.now() / 1000) + 300), nonce: `0x${(++nonce).toString(16).padStart(64, \"0\")}` } }, extensions: challenge.extensions });\n  const buy = async body => {\n    const challengeResponse = await request(\"/v1/execute\", body); const challenge = await challengeResponse.json();\n    assert.equal(challengeResponse.status, 402, JSON.stringify(challenge));\n    const quote = challengeResponse.headers.get(\"x-xguard-quote\");",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/outcome-http-test.js",
       "line": 105,
       "excerpt": "    const proof = payload(challenge);\n    const headers = { \"x-xguard-quote\": quote, \"payment-signature\": encodePaymentSignatureHeader(proof) };\n    return { response: await request(\"/v1/execute\", body, headers), quote, proof, headers, challenge };\n  };\n  return { env, counts, request, payload, buy, base, logs };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/paid-agent-entry.js",
       "line": 928,
       "excerpt": "    if (!resolved.ok) throw Object.assign(new Error(resolved.code), { code: resolved.code });\n    try {\n      response = await fetch(current, {\n        method: input.method,\n        headers: { accept: \"application/json,text/plain,text/html,application/xml,text/xml;q=0.9,*/*;q=0.1\", \"user-agent\": `XGuard-Web-Fetch/${VERSION}` },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/rail.js",
       "line": 285,
       "excerpt": "\n  try {\n    const upstream = await fetch(String(permit.target), {\n      method: String(permit.method || \"POST\").toUpperCase(),\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 42,
       "excerpt": "}\nconst request = (env, path, init = {}) => app.fetch(new Request(`https://api.xguardgate.com${path}`, init), env, {});\nconst post = (env, path, body, token) => request(env, path, { method: 'POST', headers: { 'content-type': 'application/json', ...(token ? { authorization: `Bearer ${token}` } : {}) }, body: JSON.stringify(body) });\nasync function onboard(env, changes = {}) {\n  const registered = await post(env, '/v1/sellers', { name: 'Fixture seller' }); assert.equal(registered.status, 201, await registered.clone().text());",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 70,
       "excerpt": "}\nasync function challenge(env, endpoint, init = {}) {\n  const response = await request(env, new URL(endpoint).pathname, init); assert.equal(response.status, 402, await response.clone().text());\n  return { body: await response.json(), quote: response.headers.get('x-xguard-quote') };\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 94,
       "excerpt": "  const stored = await sellerCall(env, '/seller/service-get', { service_id: seller.service.service_id });\n  assert.ok(stored.service.secret_envelope); assert.ok(!JSON.stringify(stored).includes('fixture-upstream-secret'));\n  assert.equal((await request(env, new URL(seller.service.endpoint).pathname)).status, 503);\n  assert.equal((await request(env, '/v1/sellers/dashboard')).status, 401);\n  assert.equal((await request(env, '/internal/revenue-funnel')).status, 401);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 95,
       "excerpt": "  assert.ok(stored.service.secret_envelope); assert.ok(!JSON.stringify(stored).includes('fixture-upstream-secret'));\n  assert.equal((await request(env, new URL(seller.service.endpoint).pathname)).status, 503);\n  assert.equal((await request(env, '/v1/sellers/dashboard')).status, 401);\n  assert.equal((await request(env, '/internal/revenue-funnel')).status, 401);\n  const catalog = await (await request(env, '/v1/marketplace/services')).json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 96,
       "excerpt": "  assert.equal((await request(env, new URL(seller.service.endpoint).pathname)).status, 503);\n  assert.equal((await request(env, '/v1/sellers/dashboard')).status, 401);\n  assert.equal((await request(env, '/internal/revenue-funnel')).status, 401);\n  const catalog = await (await request(env, '/v1/marketplace/services')).json();\n  assert.equal(catalog.services.length, 1); assert.equal(catalog.services[0].service_id, 'feed-digest');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 97,
       "excerpt": "  assert.equal((await request(env, '/v1/sellers/dashboard')).status, 401);\n  assert.equal((await request(env, '/internal/revenue-funnel')).status, 401);\n  const catalog = await (await request(env, '/v1/marketplace/services')).json();\n  assert.equal(catalog.services.length, 1); assert.equal(catalog.services[0].service_id, 'feed-digest');\n});",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 106,
       "excerpt": "  assert.equal(calls.upstream, 0); assert.equal(quote.body.extensions.xguard.allocation.platform_fee_atomic, '3000');\n  const path = new URL(seller.service.endpoint).pathname, headers = paidHeaders(quote);\n  const first = await request(env, path, { headers }); assert.equal(first.status, 200, await first.clone().text());\n  assert.deepEqual(await first.json(), { data: 'useful fixture result' });\n  assert.ok(first.headers.get('x-xguard-receipt')); assert.ok(first.headers.get('x-xguard-proof'));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 109,
       "excerpt": "  assert.deepEqual(await first.json(), { data: 'useful fixture result' });\n  assert.ok(first.headers.get('x-xguard-receipt')); assert.ok(first.headers.get('x-xguard-proof'));\n  const replay = await request(env, path, { headers }); assert.equal(replay.headers.get('x-xguard-replay'), 'true');\n  assert.deepEqual({ v: calls.verify, s: calls.settle, u: calls.upstream }, { v: 1, s: 1, u: 1 });\n  const verification = await post(env, '/v1/proofs/verify', { proof: first.headers.get('x-xguard-proof') });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 119,
       "excerpt": "  const after = await sellerCall(env, '/seller/summary'); assert.equal(after.classes.SYNTHETIC.seller_payout_atomic, '0'); assert.equal(after.classes.SYNTHETIC.same_owner_retained_atomic, '97000');\n  assert.equal(after.classes.SYNTHETIC.funnel.xguard_fee_earned, 1);\n  const recovered = await request(env, `/v1/marketplace/results/${quote.body.extensions.xguard.paymentIdentifier}`, { headers: { 'x-xguard-quote': quote.quote } });\n  assert.equal(recovered.status, 200); assert.equal(recovered.headers.get('x-xguard-replay'), 'true'); assert.equal(calls.upstream, 1);\n  assert.equal((await request(env, `/v1/marketplace/results/${quote.body.extensions.xguard.paymentIdentifier}`)).status, 403);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 121,
       "excerpt": "  const recovered = await request(env, `/v1/marketplace/results/${quote.body.extensions.xguard.paymentIdentifier}`, { headers: { 'x-xguard-quote': quote.quote } });\n  assert.equal(recovered.status, 200); assert.equal(recovered.headers.get('x-xguard-replay'), 'true'); assert.equal(calls.upstream, 1);\n  assert.equal((await request(env, `/v1/marketplace/results/${quote.body.extensions.xguard.paymentIdentifier}`)).status, 403);\n});\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 127,
       "excerpt": "  const env = environment(), calls = network(t, { valid: false }), seller = await onboard(env);\n  const q = await challenge(env, seller.service.endpoint);\n  assert.equal((await request(env, new URL(seller.service.endpoint).pathname, { headers: paidHeaders(q) })).status, 402);\n  assert.equal(calls.settle, 0); assert.equal(calls.upstream, 0);\n  const summary = await sellerCall(env, '/seller/summary');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 235,
       "excerpt": "  const env = environment(), calls = network(t); const seller = await onboard(env); const path = new URL(seller.service.endpoint).pathname;\n  const init = { method: 'POST', headers: { 'content-type': 'application/json', 'idempotency-key': 'fixture-write-1' }, body: '{\"job\":\"one\"}' };\n  assert.equal((await request(env, path, { method: 'POST' })).status, 400);\n  const q = await challenge(env, seller.service.endpoint, init);\n  const paid = { ...init, headers: { ...init.headers, ...paidHeaders(q) } };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 238,
       "excerpt": "  const q = await challenge(env, seller.service.endpoint, init);\n  const paid = { ...init, headers: { ...init.headers, ...paidHeaders(q) } };\n  assert.equal((await request(env, path, { ...paid, body: '{\"job\":\"other\"}' })).status, 400);\n  assert.equal((await request(env, path, paid)).status, 200);\n  const q2 = await challenge(env, seller.service.endpoint, init);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 239,
       "excerpt": "  const paid = { ...init, headers: { ...init.headers, ...paidHeaders(q) } };\n  assert.equal((await request(env, path, { ...paid, body: '{\"job\":\"other\"}' })).status, 400);\n  assert.equal((await request(env, path, paid)).status, 200);\n  const q2 = await challenge(env, seller.service.endpoint, init);\n  const second = await request(env, path, { ...init, headers: { ...init.headers, ...paidHeaders(q2, { nonce: '4' }) } });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 241,
       "excerpt": "  assert.equal((await request(env, path, paid)).status, 200);\n  const q2 = await challenge(env, seller.service.endpoint, init);\n  const second = await request(env, path, { ...init, headers: { ...init.headers, ...paidHeaders(q2, { nonce: '4' }) } });\n  assert.equal(second.status, 409); assert.equal(calls.settle, 1); assert.equal(calls.upstream, 1);\n});",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 251,
       "excerpt": "  const init = { method: 'POST', headers: { 'content-type': 'application/json', 'idempotency-key': 'predictable-order-key' }, body: '{\"job\":\"one\"}' };\n  const forgedQuote = await challenge(env, seller.service.endpoint, init);\n  const forged = await request(env, path, { ...init, headers: { ...init.headers, ...paidHeaders(forgedQuote) } });\n  assert.equal(forged.status, 402); assert.equal(calls.settle, 0); assert.equal(calls.upstream, 0);\n  valid = true;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 256,
       "excerpt": "  const buyerQuote = await challenge(env, seller.service.endpoint, init);\n  const buyerRequest = { ...init, headers: { ...init.headers, ...paidHeaders(buyerQuote, { nonce: '4' }) } };\n  const paid = await request(env, path, buyerRequest);\n  assert.equal(paid.status, 200, await paid.clone().text());\n  const replay = await request(env, path, buyerRequest);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 258,
       "excerpt": "  const paid = await request(env, path, buyerRequest);\n  assert.equal(paid.status, 200, await paid.clone().text());\n  const replay = await request(env, path, buyerRequest);\n  assert.equal(replay.status, 200); assert.equal(replay.headers.get('x-xguard-replay'), 'true');\n  assert.deepEqual({ verify: calls.verify, settle: calls.settle, upstream: calls.upstream }, { verify: 2, settle: 1, upstream: 1 });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 266,
       "excerpt": "  const env = environment(), calls = network(t, { failExecution: true }); const seller = await onboard(env);\n  const q = await challenge(env, seller.service.endpoint), headers = paidHeaders(q), path = new URL(seller.service.endpoint).pathname;\n  const failed = await request(env, path, { headers }); assert.equal(failed.status, 502);\n  assert.equal((await failed.json()).error.details.new_payment_required, false);\n  assert.equal((await request(env, path, { headers })).status, 502);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 268,
       "excerpt": "  const failed = await request(env, path, { headers }); assert.equal(failed.status, 502);\n  assert.equal((await failed.json()).error.details.new_payment_required, false);\n  assert.equal((await request(env, path, { headers })).status, 502);\n  assert.equal(calls.settle, 1); assert.equal(calls.upstream, 1);\n  const revenue = await sellerCall(env, '/seller/summary'); assert.equal(revenue.classes.SYNTHETIC.gross_atomic, '100000'); assert.equal(revenue.classes.SYNTHETIC.platform_fee_atomic, '0'); assert.equal(revenue.classes.SYNTHETIC.seller_credit_atomic, '0');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-entry-test.js",
       "line": 281,
       "excerpt": "  const env = environment(), secret = 'fixture-credential-987', calls = network(t, { secret }); const seller = await onboard(env, { upstream_auth: { header: 'authorization', prefix: 'Bearer ', secret } });\n  const q = await challenge(env, seller.service.endpoint); assert.equal(calls.upstream, 0);\n  const response = await request(env, new URL(seller.service.endpoint).pathname, { headers: paidHeaders(q) });\n  assert.equal(response.status, 502); assert.ok(!(await response.text()).includes(secret));\n  assert.equal(new Headers(calls.outgoing.headers).get('authorization'), `Bearer ${secret}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/seller-upstream.js",
       "line": 36,
       "excerpt": "  // No buyer authorization, payment signature, cookies or arbitrary headers are\n  // forwarded. Redirects never carry the seller's credential to another origin.\n  const upstream = await fetch(target, { method: m.method, headers: outgoing, body: ['GET', 'HEAD'].includes(m.method) ? undefined : fromBase64(m.body_base64), redirect: 'manual', signal: AbortSignal.timeout(12000) });\n  if (upstream.status >= 300 && upstream.status < 400) throw new SellerError('upstream_redirect_blocked', 502);\n  const bytes = await readBoundedBody(upstream.body, SELLER_MAX_RESPONSE_BYTES);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/relay/src/x402-market.js",
       "line": 33,
       "excerpt": "  const started = performance.now();\n  try {\n    const response = await fetch(url, {\n      headers: {\n        accept: \"application/json\",",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/ats100-ci.mjs",
       "line": 23,
       "excerpt": "let response;\ntry {\n  response = await fetch(api, {\n    method: \"POST\",\n    headers: { \"content-type\": \"application/json\", \"user-agent\": \"xguard-ats100-github-action/1.0\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/inspect-buyer-discovery.mjs",
       "line": 6,
       "excerpt": "async function probe(path, options, summarize) {\n  try {\n    const response = await fetch(cdp + path, {\n      ...options, redirect: \"error\", signal: AbortSignal.timeout(15000),\n      headers: { accept: \"application/json\", \"content-type\": \"application/json\", \"user-agent\": \"XGuard-Discovery-Observer/1.0\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/inspect-commercial.mjs",
       "line": 14,
       "excerpt": "  try {\n    const results = await Promise.all([\"/v1/balance\", \"/v1/ledger\"].map(async path => {\n      const response = await fetch(\"https://hooks.xguardgate.com\" + path, { headers: { authorization: `Bearer ${process.env.XGUARD_OPERATOR_KEY}` }, signal: AbortSignal.timeout(15000), redirect: \"error\" });\n      if (!response.ok) throw new Error(`billing_HTTP_${response.status}`);\n      return response.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/live-admin-smoke.mjs",
       "line": 8,
       "excerpt": "  const origin = process.env.LIVE_ORIGIN || 'https://xguardgate.com';\n  const headers = { authorization: `Bearer ${key}`, accept: 'application/json', 'user-agent': 'XGuardLive-admin-smoke/6.0', 'content-type': 'application/json' };\n  const response = await fetch(origin + '/admin', { headers, signal: AbortSignal.timeout(25000) });\n  assert.equal(response.status, 200, 'Owner authentication failed');\n  const body = await response.json(); assert.ok(body.stats); assert.ok(body.state.config);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/live-admin-smoke.mjs",
       "line": 11,
       "excerpt": "  assert.equal(response.status, 200, 'Owner authentication failed');\n  const body = await response.json(); assert.ok(body.stats); assert.ok(body.state.config);\n  const bootstrap = await fetch(origin + '/admin/bootstrap', { method: 'POST', headers, body: '{}', signal: AbortSignal.timeout(25000) });\n  assert.equal(bootstrap.status, 200, 'Bootstrap failed');\n  console.log(JSON.stringify({ owner_access: 'verified', curated_collection: 'queued', monetization_mode: body.state.config.mode, paid_test_requests: 0 }));",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/live-diagnostics.mjs",
       "line": 50,
       "excerpt": "  for (const path of ['/healthz', '/fact/npm/undici/latest-version', '/']) {\n    try {\n      const response = await fetch('https://xguardgate.com' + path, { headers: { 'user-agent': 'XGuardLive-diagnostics/6.0', accept: 'application/json' }, signal: AbortSignal.timeout(15000) });\n      await response.body?.cancel(); console.log(JSON.stringify({ probe: path, status: response.status }));\n    } catch { console.log(JSON.stringify({ probe: path, status: 'network-error' })); }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 74,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source reads a credential header but no enforcing middleware or rejection path was found — `03` §4's \"present but optional or trivially bypassable\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://xguardgate.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 13 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Basic Auth Credentials, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at apps/billing/src/index.test.js:42; Secret Keyword at apps/relay/src/agent-token-usage-test.js:303; Secret Keyword at apps/relay/src/canonical-entry.js:345; Basic Auth Credentials at apps/relay/src/core/reconcile-payment-test.js:8; Secret Keyword at apps/relay/src/core/seller-policy.js:86; Hex High Entropy String at apps/relay/src/discovery-entry.js:11; Secret Keyword at apps/relay/src/execution-entry.js:45; Base64 High Entropy String at apps/relay/src/rail-entry.js:10; Basic Auth Credentials at apps/relay/src/seller-entry-test.js:274; Basic Auth Credentials at apps/relay/test/live.test.mjs:23; …and 3 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "22 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 8 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (50 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 26 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 57,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "apps/relay/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "apps/relay/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.35.4 — GHSA-wq5f-xc86-pv6w",
       "detail": "transitive, CVSS 8.9, fixed in 0.35.5",
       "path": "apps/relay/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.7.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "apps/relay/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.7.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "apps/relay/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.7 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "apps/relay/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 22,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mova-compact/mova-flat-runner",
   "version": "2.0.6",
   "slug": "io-github-mova-compact-mova-flat-runner",
   "scanned_at": "2026-10-16T02:41:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/mova-compact/mova-flat-runner",
   "package": "npm:mova-mcp@2.0.6",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (32 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code; the declared repository could not be read to score instead",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.mrslbt/paypay-mcp",
   "version": "0.2.1",
   "slug": "io-github-mrslbt-paypay-mcp",
   "scanned_at": "2026-10-16T02:41:57+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/mrslbt/paypay-mcp",
   "package": "npm:paypay-mcp@0.2.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "36eea75e72ec18232ec60de335641e0f2bb0f7fa",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 20,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 99,
       "excerpt": "    let text: string;\n    try {\n      response = await fetch(url, {\n        method: opts.method,\n        headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:83",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 65 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.musaddiq-dev/mysql-mcp-server",
   "version": "0.1.2",
   "slug": "io-github-musaddiq-dev-mysql-mcp-server",
   "scanned_at": "2026-10-16T02:42:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/musaddiq-dev/mysql-mcp-server",
   "package": "pypi:mdev-mysql-mcp-server@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/mysql_mcp_server/server.py",
       "line": 149,
       "excerpt": "    \n    try:\n        cursor.execute(f\"DESCRIBE `{table_name}`\")\n        columns = cursor.fetchall()\n        logger.debug(f\"Described table '{table_name}', found {len(columns)} columns\")",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/mysql_mcp_server/server.py",
       "line": 424,
       "excerpt": "    try:\n        # Use backticks to safely escape the table name\n        cursor.execute(f\"SHOW CREATE TABLE `{table_name}`\")\n        result = cursor.fetchone()\n        ",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/mysql_mcp_server/server.py",
       "line": 523,
       "excerpt": "        for table_name in table_names:\n            table_name = validate_identifier(table_name, \"table name\")\n            cursor.execute(f\"SELECT COUNT(*) FROM `{table_name}`\")\n            count_result = cursor.fetchone()\n            row_count = count_result[0] if count_result else 0",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:122; Secret Keyword at README.md:100",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "8 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 146 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 146 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source: requirements.txt does not pin every requirement to one exact version, so dependency versions are unresolved and no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ni-c/google-search-console-mcp",
   "version": "0.3.0",
   "slug": "io-github-ni-c-google-search-console-mcp",
   "scanned_at": "2026-10-16T02:42:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ni-c/google-search-console-mcp",
   "package": "npm:@ni-c/google-search-console-mcp@0.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "ccb0f9aaf931fcfc70774546506ac4f3965e2156",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 28,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository at version 0.3.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/api.ts",
       "line": 221,
       "excerpt": "\n    const url = `${BASE_URL[service]}${path}${queryString(options.query)}`;\n    const response = await fetch(url, init);\n\n    // The status is decided before a byte of the body is read. Read the other",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at dist/config.js:286",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 4 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 4 days (by releases), last release 39 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.nicglazkov/commutescout",
   "version": "2.126.1",
   "slug": "io-github-nicglazkov-commutescout",
   "scanned_at": "2026-10-16T02:42:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/nicglazkov/commutescout",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "48de6cefc84d81cd8126aeacabcbf885f3e2fd3e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 117,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 79,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 1498,
       "excerpt": "  }\n  const counts = {};\n  for (const g of groups) { ambient[g].clearLayers(); items[g] = []; }\n  if (groups.includes('camera')) { cameraCache = []; signCache = []; }\n  if (groups.some((g) => g.startsWith('clo_') || g === 'toll')) {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/build_mapstyles.mjs",
       "line": 68,
       "excerpt": "\nfor (const name of [\"positron\", \"bright\"]) {\n  const style = await (await fetch(\"https://tiles.openfreemap.org/styles/\" + name)).json();\n  style.name = \"commutescout-\" + name;\n  style.layers = style.layers.filter((l) => !/^poi/.test(l.id) && l[\"source-layer\"] !== \"poi\");",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/components/marketplace.tsx",
       "line": 136,
       "excerpt": "    );\n    const extra = wanted\n      ? fetch(\"/api/flare/sources?id=\" + encodeURIComponent(wanted), { headers })\n          .then((r) => (r.ok ? r.json() : { sources: [] }))\n          .catch(() => ({ sources: [] }))",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "site/components/turnstile-widget.tsx",
       "line": 103,
       "excerpt": "      let next: Status;\n      try {\n        const resp = await fetch(form.action, { method: \"POST\", body });\n        if (resp.ok) {\n          form.reset();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 1239,
       "excerpt": "  await Promise.all(cells.map(async ([k, la, lo]) => {\n    try {\n      const res = await fetch('/api/mapdata?bbox=' + la + ',' + lo + ',' +\n        (la + 2) + ',' + (lo + 2) + '&kinds=closure,toll&fields=geo',\n        { cache: 'no-cache' });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 1714,
       "excerpt": "  const b = SNAP_BUNDLES[key];\n  try {\n    const res = await fetch(SNAP_BASE + '/' + b.file, { cache: 'no-cache' });\n    if (res.ok) return await res.json();\n  } catch (e) { /* snapshot host unreachable: fall back below */ }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 1718,
       "excerpt": "  } catch (e) { /* snapshot host unreachable: fall back below */ }\n  try {\n    const res = await fetch('/api/mapdata?bbox=-85,-180,85,180&kinds=' +\n      b.kinds + '&slim=1', { cache: 'no-cache' });\n    if (!res.ok) return null;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 1915,
       "excerpt": "\nasync function fetchPluginBox(bbox) {\n  const res = await fetch('/api/mapdata?bbox=' + bbox + '&kinds=plugin&slim=1', { cache: 'no-cache' });\n  if (!res.ok) return null;\n  return (await res.json()).markers || [];",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 2402,
       "excerpt": "  const mid = pts[Math.floor(pts.length / 2)];\n  try {\n    const res = await fetch('/api/flow?pts=' +\n      mid[0].toFixed(4) + ',' + mid[1].toFixed(4));\n    if (!res.ok) return;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 2591,
       "excerpt": "    btn.textContent = 'Loading…'; btn.disabled = true;\n    try {\n      const res = await fetch('/api/incident/' + encodeURIComponent(btn.dataset.inc));\n      if (!res.ok) throw new Error('unavailable');\n      const d = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-json-merge (medium/low)",
       "detail": "A parsed JSON document is merged into an existing object. JSON.parse preserves a literal \"__proto__\" key, so a caller-supplied document can reach Object.prototype through Object.assign.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 2961,
       "excerpt": "  KEY: 'cs.places.v1',\n  load() {\n    try { return Object.assign({ home: null, work: null, saved: [], recents: [] }, JSON.parse(store.get(this.KEY) || '{}')); }\n    catch (_) { return { home: null, work: null, saved: [], recents: [] }; }\n  },",
       "url": "",
       "finding": "mcp-js-prototype-pollution-json-merge",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 3019,
       "excerpt": "      // upgrade the coordinates in place. The street point stays as the\n      // fallback if interpolation finds nothing.\n      fetch('/api/geocode?q=' + encodeURIComponent(c.name))\n        .then(r => r.json())\n        .then(d => {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 3107,
       "excerpt": "    try {\n      const c = map.getCenter();\n      const res = await fetch('/api/suggest?q=' + encodeURIComponent(q) +\n        '&lat=' + c.lat.toFixed(2) + '&lon=' + c.lng.toFixed(2),\n        { signal: aborter.signal });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 3150,
       "excerpt": "    val.className = 'val'; val.textContent = 'Checking address\\u2026';\n    try {\n      const res = await fetch('/api/geocode?q=' + encodeURIComponent(q));\n      const data = await res.json();\n      if (mine !== vseq) return;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 3712,
       "excerpt": "  const token = await authToken();\n  if (!token) return { error: 'signin' };\n  const res = await fetch(path, { method: 'POST',\n    headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + token },\n    body: JSON.stringify(body) });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 3724,
       "excerpt": "async function snapForReport(latlng) {\n  try {\n    const r = await fetch('/api/snap?lat=' + latlng.lat.toFixed(6) + '&lon=' + latlng.lng.toFixed(6));\n    const d = await r.json();\n    if (d && d.snapped) return Object.assign(L.latLng(d.lat, d.lon), { road: d.road || null });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/map-app.js",
       "line": 3876,
       "excerpt": "  }\n  try {\n    const res = await fetch('/api/flow?pts=' + mids.join('|'));\n    if (!res.ok) return;\n    const data = await res.json();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/sw.js",
       "line": 52,
       "excerpt": "  const cache = await caches.open(SNAP_CACHE);\n  try {\n    const res = await fetch(request);\n    if (res && res.ok) cache.put(request, res.clone());\n    return res;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/sw.js",
       "line": 80,
       "excerpt": "    const hit = await cache.match(e.request);\n    if (hit) return hit;\n    const res = await fetch(e.request);\n    if (res.ok) cache.put(e.request, res.clone());\n    return res;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/watch-app.js",
       "line": 52,
       "excerpt": "  async function api(path, options = {}) {\n    const token = await user.getIdToken();\n    const res = await fetch(path, {\n      ...options,\n      headers: { Authorization: 'Bearer ' + token,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/ca_roads_demo/static/watch-app.js",
       "line": 370,
       "excerpt": "\n  async function geocodeOne(q) {\n    const res = await fetch('/api/geocode?q=' + encodeURIComponent(q));\n    if (!res.ok) throw new Error('address lookup failed');\n    const c = ((await res.json()).candidates || [])[0];",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "src/ca_roads_demo/watch.py",
       "line": 661,
       "excerpt": "        \"apns\": {\"payload\": {\"aps\": {\"sound\": \"default\"}}},\n    }\n    r = httpx.post(FCM_URL.format(project=PROJECT), json={\"message\": msg},\n                   headers={\"Authorization\": f\"Bearer {bearer}\"}, timeout=15)\n    if r.status_code == 404 or (r.status_code == 400 and \"UNREGISTERED\" in r.text):",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 74,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source reads a credential header but no enforcing middleware or rejection path was found — `03` §4's \"present but optional or trivially bypassable\" band",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.commutescout.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 12 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at evals/results/history.jsonl:1; Hex High Entropy String at site/app/layout.tsx:98; Base64 High Entropy String at src/ca_roads_demo/states.py:1341; Hex High Entropy String at src/ca_roads_demo/static/admin.html:553; Hex High Entropy String at src/ca_roads_demo/static/map.html:515; Hex High Entropy String at src/ca_roads_demo/static/trip.html:235; Hex High Entropy String at src/ca_roads_demo/static/watch.html:399; Base64 High Entropy String at src/ca_roads_demo/watch.py:49; Base64 High Entropy String at src/ca_roads_mcp/rest.py:160; Secret Keyword at tests/test_contact.py:162; …and 2 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "10 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 9 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (6 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 9 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 63,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "next 16.3.7 — GHSA-cjq9-62q9-8jv4",
       "detail": "direct, CVSS 8.3, fixed in 16.3.8",
       "path": "site/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-cjq9-62q9-8jv4",
       "finding": "next:GHSA-cjq9-62q9-8jv4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "site/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.7 — GHSA-3w37-wq28-93x7",
       "detail": "direct, CVSS 6.3, fixed in 16.3.8",
       "path": "site/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3w37-wq28-93x7",
       "finding": "next:GHSA-3w37-wq28-93x7",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.7 — GHSA-4jqv-mc3x-m676",
       "detail": "direct, CVSS 6.3, fixed in 16.3.8",
       "path": "site/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4jqv-mc3x-m676",
       "finding": "next:GHSA-4jqv-mc3x-m676",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.7 — GHSA-f87g-xv8r-7p7x",
       "detail": "direct, CVSS 6.3, fixed in 16.3.8",
       "path": "site/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f87g-xv8r-7p7x",
       "finding": "next:GHSA-f87g-xv8r-7p7x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.7 — GHSA-mcj8-r9mp-w47p",
       "detail": "direct, CVSS 6.3, fixed in 16.3.8",
       "path": "site/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mcj8-r9mp-w47p",
       "finding": "next:GHSA-mcj8-r9mp-w47p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 16.3.7 — GHSA-39w2-rjm5-chcv",
       "detail": "direct, CVSS 5.4, fixed in 16.3.8",
       "path": "site/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-39w2-rjm5-chcv",
       "finding": "next:GHSA-39w2-rjm5-chcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 44,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.nightmoose/contractgate",
   "version": "0.4.0",
   "slug": "io-github-nightmoose-contractgate",
   "scanned_at": "2026-10-16T02:42:16+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/nightmoose/contractgate",
   "package": "npm:@nightmoose/contractgate-mcp-server@0.4.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "6d9a1577b98449eb19ff182abd5947da1711f471",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 0.4.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 3 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 19,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.nirholas/3d-agent-mcp",
   "version": "1.2.3",
   "slug": "io-github-nirholas-3d-agent-mcp",
   "scanned_at": "2026-10-16T02:42:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/nirholas/three.ws",
   "package": "npm:@three-ws/mcp-server@1.2.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 49,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 88,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/resilient-fetch.js",
       "line": 127,
       "excerpt": "\n\t\ttry {\n\t\t\tconst res = await fetch(url, { ...init, signal: controller.signal });\n\n\t\t\t// Retry on transient status codes if attempts remain and the method",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/tools/_news-core.js",
       "line": 31,
       "excerpt": "\tlet resp;\n\ttry {\n\t\tresp = await fetch(url, {\n\t\t\theaders: { accept: 'application/json', 'user-agent': 'three.ws-mcp-news/1.0' },\n\t\t\tsignal: AbortSignal.timeout(timeoutMs),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/tools/_studio-core.js",
       "line": 61,
       "excerpt": "\tif (!url) return false;\n\ttry {\n\t\tconst r = await fetch(url, {\n\t\t\tmethod: 'GET',\n\t\t\theaders: { range: 'bytes=0-0' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/tools/_studio-core.js",
       "line": 1005,
       "excerpt": "\tif (!ingestKey) return null;\n\ttry {\n\t\tconst r = await fetch(endpoint, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'content-type': 'application/json', authorization: `Bearer ${ingestKey}` },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 10 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at src/lib/base58-distribution.js:21; Base64 High Entropy String at src/lib/pump-vanity.js:16; Base64 High Entropy String at src/payments.js:35; Base64 High Entropy String at src/payments.js:118; Base64 High Entropy String at src/tools/agenc-client.js:20; Base64 High Entropy String at src/tools/agenc-list-tasks.js:50; Base64 High Entropy String at src/tools/pump-snapshot.js:201; Base64 High Entropy String at src/tools/sentiment-pulse.js:63; Secret Keyword at src/tools/vanity-grinder.js:131; Base64 High Entropy String at src/ui/commerce-receipt.html:124",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 67,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 19 issue(s) in the last 6 months: 78.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 5 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.nowledge-co/server.json",
   "version": "1.0.0",
   "slug": "io-github-nowledge-co-server-json",
   "scanned_at": "2026-10-16T02:42:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/nowledge-co/claude-dxt",
   "package": "pypi:nowledge-mem@1.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 52,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 212 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 17 days (by releases), last release 212 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.ofershap/devutils",
   "version": "1.0.2",
   "slug": "io-github-ofershap-devutils",
   "scanned_at": "2026-10-16T02:42:27+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ofershap/mcp-server-devutils",
   "package": "npm:mcp-server-devutils@1.0.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "3f8f61505a3b66ca7ac3f1f6cb7ac250f455adea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 12,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/tools/hash.ts",
       "line": 23,
       "excerpt": "  const result = {} as Record<HashAlgorithm, string>;\n  for (const algo of SUPPORTED_ALGORITHMS) {\n    result[algo] = hash(input, algo);\n  }\n  return result;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at dist/index.js:27",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 19,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 220 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (0 issue(s) in the last 6 months, under `03` §5's floor of 3): 242.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.olgasafonova/nordic-registry-mcp-server",
   "version": "1.0.2",
   "slug": "io-github-olgasafonova-nordic-registry-mcp-server",
   "scanned_at": "2026-10-16T02:42:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/olgasafonova/nordic-registry-mcp-server",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "b26bc1e938b98e008f5bbccb51907c5050429619",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 29,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 88,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/base/client.go",
       "line": 151,
       "excerpt": "\n\t// Create request\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, cfg.URL, nil)\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"failed to create request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/sweden/client.go",
       "line": 177,
       "excerpt": "\tdata.Set(\"scope\", scopeRead+\" \"+scopePing)\n\n\treq, err := http.NewRequestWithContext(ctx, http.MethodPost, c.tokenURL, strings.NewReader(data.Encode()))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"sweden: creating token request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/sweden/client.go",
       "line": 232,
       "excerpt": "\n\treqURL := c.baseURL + endpoint\n\treq, err := http.NewRequestWithContext(ctx, method, reqURL, reqBody)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"sweden: creating request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/sweden/client.go",
       "line": 384,
       "excerpt": "\n\treqURL := c.baseURL + \"/dokument/\" + url.PathEscape(documentID)\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, reqURL, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"sweden: creating request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 8 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:392; Secret Keyword at docs/PRODUCTION.md:250; Secret Keyword at docs/SETUP.md:85; Secret Keyword at docs/TEST_REPORT.md:353; Secret Keyword at internal/sweden/client.go:32; Secret Keyword at internal/sweden/client.go:93; Secret Keyword at internal/sweden/client_test.go:46; Secret Keyword at scripts/LocalSettings.php:24",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (9 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 22 days (by releases), last release 166 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 28,
     "reason": "15 vulnerabilities could not be placed in `03` §6's table and are listed but not scored",
     "assessed_weight": "0.51",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "google.golang.org/grpc 1.78.0 — GO-2026-4762",
       "detail": "transitive, CVSS 9.1, fixed in 1.79.3",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-4762",
       "finding": "google.golang.org/grpc:GO-2026-4762",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "github.com/modelcontextprotocol/go-sdk 1.3.0 — GO-2026-4770",
       "detail": "direct, CVSS 8.2, fixed in 1.4.1",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-4770",
       "finding": "github.com/modelcontextprotocol/go-sdk:GO-2026-4770",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "github.com/modelcontextprotocol/go-sdk 1.3.0 — GO-2026-5771",
       "detail": "direct, CVSS 8.1, fixed in 1.4.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5771",
       "finding": "github.com/modelcontextprotocol/go-sdk:GO-2026-5771",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "go.opentelemetry.io/otel 1.40.0 — GO-2026-5506",
       "detail": "direct, CVSS 7.5, fixed in 1.41.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5506",
       "finding": "go.opentelemetry.io/otel:GO-2026-5506",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "go.opentelemetry.io/otel/sdk 1.40.0 — GO-2026-5426",
       "detail": "direct, CVSS 7.3, fixed in 1.43.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5426",
       "finding": "go.opentelemetry.io/otel/sdk:GO-2026-5426",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "github.com/modelcontextprotocol/go-sdk 1.3.0 — GO-2026-4773",
       "detail": "direct, CVSS 7.1, fixed in 1.4.1",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-4773",
       "finding": "github.com/modelcontextprotocol/go-sdk:GO-2026-4773",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "github.com/modelcontextprotocol/go-sdk 1.3.0 — GO-2026-4569",
       "detail": "direct, CVSS 7.0, fixed in 1.3.1",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-4569",
       "finding": "github.com/modelcontextprotocol/go-sdk:GO-2026-4569",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "google.golang.org/grpc 1.78.0 — GO-2026-6061",
       "detail": "transitive, CVSS 8.8, fixed in 1.82.1",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6061",
       "finding": "google.golang.org/grpc:GO-2026-6061",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "google.golang.org/grpc 1.78.0 — GO-2026-6348",
       "detail": "transitive, CVSS 8.7, fixed in 1.83.1",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6348",
       "finding": "google.golang.org/grpc:GO-2026-6348",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "google.golang.org/grpc 1.78.0 — GO-2026-6443",
       "detail": "transitive, CVSS 8.7, fixed in 1.82.2",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6443",
       "finding": "google.golang.org/grpc:GO-2026-6443",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp 1.40.0 — GO-2026-4985",
       "detail": "direct, CVSS 5.3, fixed in 1.43.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-4985",
       "finding": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp:GO-2026-4985",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-5028",
       "detail": "transitive, CVSS 6.5, fixed in 0.55.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5028",
       "finding": "golang.org/x/net:GO-2026-5028",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "google.golang.org/grpc 1.78.0 — GO-2026-6441",
       "detail": "transitive, CVSS 6.3, fixed in 1.83.1",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6441",
       "finding": "google.golang.org/grpc:GO-2026-6441",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp 1.40.0 — GO-2026-6505",
       "detail": "direct, CVSS 2.0, fixed in 1.45.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6505",
       "finding": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp:GO-2026-6505",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "go.opentelemetry.io/otel/sdk 1.40.0 — GO-2026-6505",
       "detail": "direct, CVSS 2.0, fixed in 1.45.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6505",
       "finding": "go.opentelemetry.io/otel/sdk:GO-2026-6505",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "go.opentelemetry.io/otel/exporters/otlp/otlptrace 1.40.0 — GO-2026-6505",
       "detail": "transitive, CVSS 2.0, fixed in 1.45.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6505",
       "finding": "go.opentelemetry.io/otel/exporters/otlp/otlptrace:GO-2026-6505",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-4918",
       "detail": "transitive, no CVSS published, fixed in 0.53.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-4918",
       "finding": "golang.org/x/net:GO-2026-4918",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-5025",
       "detail": "transitive, no CVSS published, fixed in 0.55.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5025",
       "finding": "golang.org/x/net:GO-2026-5025",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-5026",
       "detail": "transitive, no CVSS published, fixed in 0.55.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5026",
       "finding": "golang.org/x/net:GO-2026-5026",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-5027",
       "detail": "transitive, no CVSS published, fixed in 0.55.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5027",
       "finding": "golang.org/x/net:GO-2026-5027",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-5029",
       "detail": "transitive, no CVSS published, fixed in 0.55.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5029",
       "finding": "golang.org/x/net:GO-2026-5029",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-5030",
       "detail": "transitive, no CVSS published, fixed in 0.55.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5030",
       "finding": "golang.org/x/net:GO-2026-5030",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-5942",
       "detail": "transitive, no CVSS published, fixed in 0.56.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5942",
       "finding": "golang.org/x/net:GO-2026-5942",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-6603",
       "detail": "transitive, no CVSS published, fixed in 0.60.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6603",
       "finding": "golang.org/x/net:GO-2026-6603",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-6610",
       "detail": "transitive, no CVSS published, fixed in 0.60.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6610",
       "finding": "golang.org/x/net:GO-2026-6610",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-6611",
       "detail": "transitive, no CVSS published, fixed in 0.60.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6611",
       "finding": "golang.org/x/net:GO-2026-6611",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-6612",
       "detail": "transitive, no CVSS published, fixed in 0.60.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6612",
       "finding": "golang.org/x/net:GO-2026-6612",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/net 0.49.0 — GO-2026-6617",
       "detail": "transitive, no CVSS published, fixed in 0.60.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6617",
       "finding": "golang.org/x/net:GO-2026-6617",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/sys 0.40.0 — GO-2026-5024",
       "detail": "transitive, no CVSS published, fixed in 0.44.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5024",
       "finding": "golang.org/x/sys:GO-2026-5024",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/text 0.33.0 — GO-2026-5970",
       "detail": "transitive, no CVSS published, fixed in 0.39.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5970",
       "finding": "golang.org/x/text:GO-2026-5970",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "golang.org/x/text 0.33.0 — GO-2026-6629",
       "detail": "transitive, no CVSS published, fixed in 0.41.0",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-6629",
       "finding": "golang.org/x/text:GO-2026-6629",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.omniologynow-rgb/scout-intel-mcp",
   "version": "1.0.3",
   "slug": "io-github-omniologynow-rgb-scout-intel-mcp",
   "scanned_at": "2026-10-16T02:42:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "pypi:scout-intel-mcp@1.0.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 23,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://scout-intel.mcpize.run; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:99; Secret Keyword at README.md:59; Secret Keyword at src/scout_mcp/auth.py:20",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "7 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source: requirements.txt does not pin every requirement to one exact version, so dependency versions are unresolved and no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'AGPL-3.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.opsconduit/jobber-mcp",
   "version": "0.1.3",
   "slug": "io-github-opsconduit-jobber-mcp",
   "scanned_at": "2026-10-16T02:42:38+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/opsconduit/jobber-mcp",
   "package": "npm:@opsconduit/jobber-mcp@0.1.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 8,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/jobber.js",
       "line": 210,
       "excerpt": "  const timer = setTimeout(() => controller.abort(), timeoutMs);\n  try {\n    return await fetch(url, { ...options, signal: controller.signal });\n  } catch (error) {\n    if (error.name === \"AbortError\") {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at docs/install.md:92; Secret Keyword at scripts/security-regression.js:13",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "6 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 151 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.paiml/pforge",
   "version": "0.1.2",
   "slug": "io-github-paiml-pforge",
   "scanned_at": "2026-10-16T02:42:41+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/paiml/pforge",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "unknown",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "78e6860810d739c4ee559cc8652755ed1496c1a5",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 16,
   "files_pruned": 12,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "12 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "pforge-book/book/book.js",
       "line": 23,
       "excerpt": "    function fetch_with_timeout(url, options, timeout = 6000) {\n        return Promise.race([\n            fetch(url, options),\n            new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout))\n        ]);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "pforge-book/book/searcher.js",
       "line": 471,
       "excerpt": "    }\n\n    fetch(path_to_root + 'searchindex.json')\n        .then(response => response.json())\n        .then(json => init(json))        ",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": null,
     "reason": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "the registry entry declares no transport for any package or remote",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 5 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at .github/workflows/ci.yml:21; Secret Keyword at crates/pforge-runtime/src/handlers/http.rs:369; Secret Keyword at pforge-book/book/ch07-01-red.html:422; Secret Keyword at pforge-book/book/print.html:11315; Secret Keyword at pforge-book/src/ch07-01-red.md:345",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 66,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 56 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 6 issue(s) in the last 6 months: 56.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "185 vulnerabilities were found and none could be placed in `03` §6's table — no CVSS score, or an ecosystem whose manifest we cannot parse for direct-vs-transitive",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 135,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "openssl 0.10.73 — GHSA-xp3w-r5p5-63rr",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.10.79",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xp3w-r5p5-63rr",
       "finding": "openssl:GHSA-xp3w-r5p5-63rr",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-xp3w-r5p5-63rr",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.10.79",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xp3w-r5p5-63rr",
       "finding": "openssl:GHSA-xp3w-r5p5-63rr",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-xp3w-r5p5-63rr",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.10.79",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xp3w-r5p5-63rr",
       "finding": "openssl:GHSA-xp3w-r5p5-63rr",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-xp3w-r5p5-63rr",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.10.79",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xp3w-r5p5-63rr",
       "finding": "openssl:GHSA-xp3w-r5p5-63rr",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-xp3w-r5p5-63rr",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.10.79",
       "path": "examples/rest-api-proxy/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xp3w-r5p5-63rr",
       "finding": "openssl:GHSA-xp3w-r5p5-63rr",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0037",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.11.14",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0037",
       "finding": "quinn-proto:RUSTSEC-2026-0037",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0037",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.11.14",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0037",
       "finding": "quinn-proto:RUSTSEC-2026-0037",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0037",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.11.14",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0037",
       "finding": "quinn-proto:RUSTSEC-2026-0037",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0037",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.11.14",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0037",
       "finding": "quinn-proto:RUSTSEC-2026-0037",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0037",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.11.14",
       "path": "examples/rest-api-proxy/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0037",
       "finding": "quinn-proto:RUSTSEC-2026-0037",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0037",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.7, fixed in 0.11.14",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0037",
       "finding": "quinn-proto:RUSTSEC-2026-0037",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-hppc-g8h3-xhp3",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.3, fixed in 0.10.78",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hppc-g8h3-xhp3",
       "finding": "openssl:GHSA-hppc-g8h3-xhp3",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-hppc-g8h3-xhp3",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.3, fixed in 0.10.78",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hppc-g8h3-xhp3",
       "finding": "openssl:GHSA-hppc-g8h3-xhp3",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-hppc-g8h3-xhp3",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.3, fixed in 0.10.78",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hppc-g8h3-xhp3",
       "finding": "openssl:GHSA-hppc-g8h3-xhp3",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-hppc-g8h3-xhp3",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.3, fixed in 0.10.78",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hppc-g8h3-xhp3",
       "finding": "openssl:GHSA-hppc-g8h3-xhp3",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-hppc-g8h3-xhp3",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.3, fixed in 0.10.78",
       "path": "examples/rest-api-proxy/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hppc-g8h3-xhp3",
       "finding": "openssl:GHSA-hppc-g8h3-xhp3",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-ghm9-cr32-g9qj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.1, fixed in 0.10.78",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ghm9-cr32-g9qj",
       "finding": "openssl:GHSA-ghm9-cr32-g9qj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-ghm9-cr32-g9qj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.1, fixed in 0.10.78",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ghm9-cr32-g9qj",
       "finding": "openssl:GHSA-ghm9-cr32-g9qj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-ghm9-cr32-g9qj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.1, fixed in 0.10.78",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ghm9-cr32-g9qj",
       "finding": "openssl:GHSA-ghm9-cr32-g9qj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-ghm9-cr32-g9qj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.1, fixed in 0.10.78",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ghm9-cr32-g9qj",
       "finding": "openssl:GHSA-ghm9-cr32-g9qj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-ghm9-cr32-g9qj",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 8.1, fixed in 0.10.78",
       "path": "examples/rest-api-proxy/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-ghm9-cr32-g9qj",
       "finding": "openssl:GHSA-ghm9-cr32-g9qj",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0185",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.15",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0185",
       "finding": "quinn-proto:RUSTSEC-2026-0185",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0185",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.15",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0185",
       "finding": "quinn-proto:RUSTSEC-2026-0185",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0185",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.15",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0185",
       "finding": "quinn-proto:RUSTSEC-2026-0185",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0185",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.15",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0185",
       "finding": "quinn-proto:RUSTSEC-2026-0185",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0185",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.15",
       "path": "examples/rest-api-proxy/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0185",
       "finding": "quinn-proto:RUSTSEC-2026-0185",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0185",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.15",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0185",
       "finding": "quinn-proto:RUSTSEC-2026-0185",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.16 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "examples/rest-api-proxy/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.13 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.16 — RUSTSEC-2026-0341",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.17",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0341",
       "finding": "quinn-proto:RUSTSEC-2026-0341",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.7 — RUSTSEC-2026-0104",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.103.13",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0104",
       "finding": "rustls-webpki:RUSTSEC-2026-0104",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.7 — RUSTSEC-2026-0104",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.103.13",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0104",
       "finding": "rustls-webpki:RUSTSEC-2026-0104",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.7 — RUSTSEC-2026-0104",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.103.13",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0104",
       "finding": "rustls-webpki:RUSTSEC-2026-0104",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.7 — RUSTSEC-2026-0104",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.103.13",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0104",
       "finding": "rustls-webpki:RUSTSEC-2026-0104",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.7 — RUSTSEC-2026-0104",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.103.13",
       "path": "examples/rest-api-proxy/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0104",
       "finding": "rustls-webpki:RUSTSEC-2026-0104",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "rustls-webpki 0.103.7 — RUSTSEC-2026-0104",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.103.13",
       "path": "fuzz/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0104",
       "finding": "rustls-webpki:RUSTSEC-2026-0104",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-8c75-8mhr-p7r9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8c75-8mhr-p7r9",
       "finding": "openssl:GHSA-8c75-8mhr-p7r9",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-8c75-8mhr-p7r9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8c75-8mhr-p7r9",
       "finding": "openssl:GHSA-8c75-8mhr-p7r9",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-8c75-8mhr-p7r9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8c75-8mhr-p7r9",
       "finding": "openssl:GHSA-8c75-8mhr-p7r9",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-8c75-8mhr-p7r9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8c75-8mhr-p7r9",
       "finding": "openssl:GHSA-8c75-8mhr-p7r9",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-8c75-8mhr-p7r9",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/rest-api-proxy/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8c75-8mhr-p7r9",
       "finding": "openssl:GHSA-8c75-8mhr-p7r9",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-pqf5-4pqq-29f5",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/hello-world/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pqf5-4pqq-29f5",
       "finding": "openssl:GHSA-pqf5-4pqq-29f5",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-pqf5-4pqq-29f5",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/pmat-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pqf5-4pqq-29f5",
       "finding": "openssl:GHSA-pqf5-4pqq-29f5",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-pqf5-4pqq-29f5",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/polyglot-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pqf5-4pqq-29f5",
       "finding": "openssl:GHSA-pqf5-4pqq-29f5",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "openssl 0.10.73 — GHSA-pqf5-4pqq-29f5",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.2, fixed in 0.10.78",
       "path": "examples/production-server/Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pqf5-4pqq-29f5",
       "finding": "openssl:GHSA-pqf5-4pqq-29f5",
       "severity": "high",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 65,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pcaiano/toolscout",
   "version": "1.0.0",
   "slug": "io-github-pcaiano-toolscout",
   "scanned_at": "2026-10-16T02:43:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/pcaiano/toolscout",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://trytoolscout.org/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.3",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 0 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/pcaiano/toolscout) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pdf4me/pdf4me-mcp",
   "version": "1.0.0",
   "slug": "io-github-pdf4me-pdf4me-mcp",
   "scanned_at": "2026-10-16T02:43:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pdf4me/pdf4me-mcp",
   "package": "pypi:pdf4me-mcp@1.0.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 101,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 65,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "pdf4me_mcp/components/tools/extract_attachment_from_pdf.py",
       "line": 245,
       "excerpt": "        try:\n            with zipfile.ZipFile(BytesIO(raw), \"r\") as zf:\n                zf.extractall(resolved_out)\n                extracted_names = zf.namelist()\n        except zipfile.BadZipFile:",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "pdf4me_mcp/components/tools/split_pdf_by_swiss_qr.py",
       "line": 296,
       "excerpt": "        try:\n            with zipfile.ZipFile(BytesIO(final_resp.content), \"r\") as zf:\n                zf.extractall(resolved_out)\n                extracted_names = zf.namelist()\n        except zipfile.BadZipFile:",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.pdf4me.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:179; Secret Keyword at README.md:138",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "39 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 70 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 31,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.7 — PYSEC-2026-3553",
       "detail": "transitive, CVSS 8.7, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.7 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.27.0 — PYSEC-2026-3481",
       "detail": "transitive, CVSS 7.6, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3481",
       "finding": "mcp:PYSEC-2026-3481",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.27.0 — PYSEC-2026-3483",
       "detail": "transitive, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.7 — GHSA-537c-gmf6-5ccf",
       "detail": "transitive, CVSS 7.5, fixed in 48.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-537c-gmf6-5ccf",
       "finding": "cryptography:GHSA-537c-gmf6-5ccf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.27.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "transitive, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.26 — PYSEC-2026-3036",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3036",
       "finding": "python-multipart:PYSEC-2026-3036",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.26 — PYSEC-2026-3039",
       "detail": "transitive, CVSS 7.5, fixed in 0.0.27",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3039",
       "finding": "python-multipart:PYSEC-2026-3039",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-2281",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2281",
       "finding": "starlette:PYSEC-2026-2281",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-249",
       "detail": "transitive, CVSS 7.5, fixed in 1.3.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-249",
       "finding": "starlette:PYSEC-2026-249",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-179",
       "detail": "transitive, CVSS 7.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-179",
       "finding": "pyjwt:PYSEC-2026-179",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.27.0 — PYSEC-2026-3482",
       "detail": "transitive, CVSS 7.1, fixed in 1.27.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3482",
       "finding": "mcp:PYSEC-2026-3482",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.7 — PYSEC-2026-3554",
       "detail": "transitive, CVSS 6.9, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3554",
       "finding": "cryptography:PYSEC-2026-3554",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "idna 3.11 — PYSEC-2026-215",
       "detail": "transitive, CVSS 6.9, fixed in 3.15",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-215",
       "finding": "idna:PYSEC-2026-215",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-161",
       "detail": "transitive, CVSS 6.5, fixed in 1.0.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-161",
       "finding": "starlette:PYSEC-2026-161",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authlib 1.6.10 — PYSEC-2026-188",
       "detail": "transitive, CVSS 6.1, fixed in 1.6.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-188",
       "finding": "authlib:PYSEC-2026-188",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authlib 1.6.10 — PYSEC-2026-25",
       "detail": "transitive, CVSS 5.4, fixed in 1.6.11",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-25",
       "finding": "authlib:PYSEC-2026-25",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — GHSA-jq35-7prp-9v3f",
       "detail": "transitive, CVSS 5.4, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jq35-7prp-9v3f",
       "finding": "pyjwt:GHSA-jq35-7prp-9v3f",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pydantic-settings 2.13.1 — GHSA-4xgf-cpjx-pc3j",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xgf-cpjx-pc3j",
       "finding": "pydantic-settings:GHSA-4xgf-cpjx-pc3j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-178",
       "detail": "transitive, CVSS 5.3, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-178",
       "finding": "pyjwt:PYSEC-2026-178",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-2280",
       "detail": "transitive, CVSS 5.3, fixed in 1.1.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2280",
       "finding": "starlette:PYSEC-2026-2280",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.0.0 — PYSEC-2026-248",
       "detail": "transitive, CVSS 5.3, fixed in 1.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-248",
       "finding": "starlette:PYSEC-2026-248",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-175",
       "detail": "transitive, CVSS 4.2, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-175",
       "finding": "pyjwt:PYSEC-2026-175",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.12.1 — PYSEC-2026-177",
       "detail": "transitive, CVSS 3.7, fixed in 2.13.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-177",
       "finding": "pyjwt:PYSEC-2026-177",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.26 — PYSEC-2026-3037",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3037",
       "finding": "python-multipart:PYSEC-2026-3037",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.26 — PYSEC-2026-3040",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.31",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3040",
       "finding": "python-multipart:PYSEC-2026-3040",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "python-multipart 0.0.26 — PYSEC-2026-3041",
       "detail": "transitive, CVSS 3.7, fixed in 0.0.30",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3041",
       "finding": "python-multipart:PYSEC-2026-3041",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pedroknigge/arkgate",
   "version": "4.8.24",
   "slug": "io-github-pedroknigge-arkgate",
   "scanned_at": "2026-10-16T02:43:05+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pedroknigge/arkgate",
   "package": "npm:arkgate@4.8.24",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 167,
   "files_pruned": 5,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 82,
     "reason": "5 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 3 files could not be parsed and were not scanned",
     "assessed_weight": "0.98",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "bin/lib/ark-order-invariants.mjs",
       "line": 48,
       "excerpt": "            throw new ArkOrderError('ARKORDER_NESTED_XI', `${label} key ${JSON.stringify(key)} is not a slow primitive (nested values are microstate)`);\n        }\n        out[key] = Object.is(value, -0) ? 0 : value;\n    }\n    return Object.freeze(out);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "bin/lib/write-path-capabilities.mjs",
       "line": 516,
       "excerpt": "  }\n  for (const capability of WRITE_CAPABILITY_NAMES) {\n    evidence[capability] = unique(evidence[capability]);\n  }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "bin/ark-dashboard.mjs",
       "line": 96,
       "excerpt": "  const timer = setTimeout(() => controller.abort(), fetchTimeoutMs);\n  try {\n    const res = await fetch(url, { signal: controller.signal });\n    if (!res.ok) {\n      return { ok: false, kind: 'failure', error: `HTTP ${res.status}` };",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/ci-and-commands.mjs",
       "line": 560,
       "excerpt": "    let text;\n    try {\n      text = fs.readFileSync(path.join(dir, name), 'utf8');\n    } catch {\n      continue;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/flat-parent-importers.mjs",
       "line": 94,
       "excerpt": "function readText(root, rel) {\n  try {\n    return fs.readFileSync(path.join(root, rel), 'utf8');\n  } catch {\n    return '';",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/gate-files.mjs",
       "line": 731,
       "excerpt": "    let content = '';\n    try {\n      content = fs.readFileSync(path.join(workflowsDir, file), 'utf8');\n    } catch {\n      continue;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/github-enforcement.mjs",
       "line": 285,
       "excerpt": "    return fs.readdirSync(directory)\n      .filter((file) => /\\.ya?ml$/i.test(file))\n      .map((file) => ({ file, text: fs.readFileSync(path.join(directory, file), 'utf8') }));\n  } catch {\n    return [];",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/html-report.mjs",
       "line": 39,
       "excerpt": "  const fileIncludes = (rel, needle) => {\n    try {\n      return fs.readFileSync(path.join(root, rel), 'utf8').includes(needle);\n    } catch {\n      return false;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/html-report.mjs",
       "line": 373,
       "excerpt": "  if (!noArchive) {\n    const stamp = new Date().toISOString().replace(/[:.]/g, '-');\n    fs.writeFileSync(path.join(historyDir, `${stamp}.json`), `${JSON.stringify(snapshot, null, 2)}\\n`);\n    // Cap history: keep newest ARK_REPORT_HISTORY_MAX JSON files.\n    try {",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/install-migrate.mjs",
       "line": 104,
       "excerpt": "    let text;\n    try {\n      text = fs.readFileSync(path.join(root, rel), 'utf8');\n    } catch {\n      continue;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/install-migrate.mjs",
       "line": 120,
       "excerpt": "    let json;\n    try {\n      json = JSON.parse(fs.readFileSync(path.join(root, rel), 'utf8'));\n    } catch {\n      continue;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/install-migrate.mjs",
       "line": 549,
       "excerpt": "      let existing = '';\n      try {\n        existing = fs.readFileSync(path.join(root, relativePath), 'utf8');\n      } catch {\n        // Missing file → write the generated Ark template.",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/mcp-adoption.mjs",
       "line": 124,
       "excerpt": "    let json;\n    try {\n      json = JSON.parse(fs.readFileSync(path.join(root, rel), 'utf8'));\n    } catch {\n      continue;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/mcp-adoption.mjs",
       "line": 403,
       "excerpt": "        for (const f of fs.readdirSync(wfDir)) {\n          if (!/\\.ya?ml$/i.test(f)) continue;\n          const text = fs.readFileSync(path.join(wfDir, f), 'utf8');\n          if (text.includes('--baseline') && (text.includes('ark-check') || text.includes('arkgate-check'))) {\n            primaryPathUsesBaseline = true;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/skill-install.mjs",
       "line": 588,
       "excerpt": "    .map((entry) => entry.name)\n    .sort()\n    .map((name) => [path.basename(name, '.md'), fs.readFileSync(path.join(dir, name), 'utf8')]);\n}\n",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "bin/lib/weakest-link.mjs",
       "line": 133,
       "excerpt": "    let text = '';\n    try {\n      text = fs.readFileSync(path.join(wfDir, f), 'utf8');\n    } catch {\n      continue;",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 3 issue(s) in the last 6 months: 1.2 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 68,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.penny4nonsense/mcp-pymupdf",
   "version": "0.1.1",
   "slug": "io-github-penny4nonsense-mcp-pymupdf",
   "scanned_at": "2026-10-16T02:43:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/penny4nonsense/mcp-pymupdf",
   "package": "pypi:mcp-pymupdf@0.1.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "mcp_pymupdf/server.py",
       "line": 44,
       "excerpt": "def _download_pdf(url: str) -> tuple[Path, bool]:\n    \"\"\"Download a PDF from a URL to a temp file.\"\"\"\n    response = requests.get(\n        url,\n        timeout=DOWNLOAD_TIMEOUT,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "3 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 116 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 21,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "anyio 4.14.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.28.0 — PYSEC-2026-3483",
       "detail": "direct, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.28.0 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4177",
       "detail": "transitive, CVSS 8.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4177",
       "finding": "urllib3:PYSEC-2026-4177",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 49.0.0 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "httpcore2 2.4.0 — PYSEC-2026-3844",
       "detail": "transitive, CVSS 8.1, fixed in 2.10.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3844",
       "finding": "httpcore2:PYSEC-2026-3844",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.5.1 — PYSEC-2026-4013",
       "detail": "transitive, CVSS 7.8, fixed in 21.7.13",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4013",
       "finding": "virtualenv:PYSEC-2026-4013",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.5.1 — PYSEC-2026-4011",
       "detail": "transitive, CVSS 7.7, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4011",
       "finding": "virtualenv:PYSEC-2026-4011",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4175",
       "detail": "transitive, CVSS 7.6, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4175",
       "finding": "urllib3:PYSEC-2026-4175",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "httpx2 2.4.0 — PYSEC-2026-3846",
       "detail": "transitive, CVSS 7.5, fixed in 2.12.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3846",
       "finding": "httpx2:PYSEC-2026-3846",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4143",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4143",
       "finding": "pyjwt:PYSEC-2026-4143",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4150",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4150",
       "finding": "pyjwt:PYSEC-2026-4150",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4151",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4151",
       "finding": "pyjwt:PYSEC-2026-4151",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.5.1 — PYSEC-2026-4014",
       "detail": "transitive, CVSS 7.3, fixed in 21.7.12",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4014",
       "finding": "virtualenv:PYSEC-2026-4014",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.14.0 — PYSEC-2026-4023",
       "detail": "transitive, CVSS 7.0, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4023",
       "finding": "anyio:PYSEC-2026-4023",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "urllib3 2.7.0 — PYSEC-2026-4176",
       "detail": "transitive, CVSS 6.9, fixed in 2.8.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4176",
       "finding": "urllib3:PYSEC-2026-4176",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.14.0 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "virtualenv 21.5.1 — PYSEC-2026-4012",
       "detail": "transitive, CVSS 5.8, fixed in 21.7.11",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4012",
       "finding": "virtualenv:PYSEC-2026-4012",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "httpx2 2.4.0 — PYSEC-2026-3849",
       "detail": "transitive, CVSS 5.6, fixed in 2.11.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3849",
       "finding": "httpx2:PYSEC-2026-3849",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "httpx2 2.4.0 — PYSEC-2026-3848",
       "detail": "transitive, CVSS 5.3, fixed in 2.11.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3848",
       "finding": "httpx2:PYSEC-2026-3848",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4142",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4142",
       "finding": "pyjwt:PYSEC-2026-4142",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pijusz/mcp-gsc",
   "version": "0.1.7",
   "slug": "io-github-pijusz-mcp-gsc",
   "scanned_at": "2026-10-16T02:43:17+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pijusz/mcp-gsc",
   "package": "npm:mcp-gsc@0.1.7",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "6910d47d334a80fc39ee075487360ac2f3bfff4a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 26,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 75,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/auth/setup.ts",
       "line": 81,
       "excerpt": "\n  try {\n    exec(openCmd);\n  } catch {}\n",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/gsc-api.ts",
       "line": 29,
       "excerpt": "      const timer = setTimeout(() => controller.abort(), timeout);\n\n      const res = await fetch(url, { ...init, signal: controller.signal });\n      clearTimeout(timer);\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 6 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at dist/index.js:11473; Secret Keyword at dist/index.js:11474; Secret Keyword at dist/index.js:12319; Secret Keyword at dist/index.js:13413; Secret Keyword at dist/index.js:15247; Base64 High Entropy String at dist/index.js:50163",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 77 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 77 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/anapioficeandfire",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-anapioficeandfire",
   "scanned_at": "2026-10-16T02:43:24+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-anapioficeandfire",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "ce5f57986e197f592bc381e6ea112e8d06cfecdd",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/anapioficeandfire/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 21 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/arcgis-sanjuannm",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-arcgis-sanjuannm",
   "scanned_at": "2026-10-16T02:43:28+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-arcgis-sanjuannm",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "2a344d76ed1fc5f774767f4dd9b6e84ed7a64b47",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/arcgis-sanjuannm/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 21 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/arcgis-washingtoncomn",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-arcgis-washingtoncomn",
   "scanned_at": "2026-10-16T02:43:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-arcgis-washingtoncomn",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "abf2c6b1a40698c536c4639473deeb409f16e375",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/arcgis-washingtoncomn/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 21 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/ban-fr",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-ban-fr",
   "scanned_at": "2026-10-16T02:43:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-ban-fr",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "0659d1e2746f5702392679bf7bedc3c70f58ac90",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/ban-fr/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 21 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/cornell-wex",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-cornell-wex",
   "scanned_at": "2026-10-16T02:43:39+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-cornell-wex",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "a72501a812081f589c1dd136f1952b21ce65af92",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 1279,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/cornell-wex/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 21 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/gnews",
   "version": "0.1.5",
   "slug": "io-github-pipeworx-io-gnews",
   "scanned_at": "2026-10-16T02:43:43+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-gnews",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "aee9b1b9b1b9b4f027677792fb5c10f995066123",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/gnews/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 19 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/gnomad",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-gnomad",
   "scanned_at": "2026-10-16T02:43:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-gnomad",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "7a0bfe58455ca759ccb48c94c5dd008936c1cb9a",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/gnomad/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/hackernews",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-hackernews",
   "scanned_at": "2026-10-16T02:43:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-hackernews",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "35b035ac1e370ef4775418d4af9183110493d323",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/hackernews/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/hsr-notices",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-hsr-notices",
   "scanned_at": "2026-10-16T02:43:54+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-hsr-notices",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "b1f92e9bca09461de0d696b6d72c777043a02350",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/hsr-notices/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30; Secret Keyword at src/index.ts:1161",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/inspire-hep",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-inspire-hep",
   "scanned_at": "2026-10-16T02:43:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-inspire-hep",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "499c23f62d7d1e3282a7aca049f28cfea0ba4f40",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/inspire-hep/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/moralis",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-moralis",
   "scanned_at": "2026-10-16T02:44:01+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-moralis",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "2b3e1171048220b8e1be1051be71dabd595c4eaa",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/moralis/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/noaa-tides",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-noaa-tides",
   "scanned_at": "2026-10-16T02:44:05+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-noaa-tides",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "9e53e3d7c9134c1d5de1fde511fd7be9563073fc",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/noaa-tides/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/openaire",
   "version": "0.1.3",
   "slug": "io-github-pipeworx-io-openaire",
   "scanned_at": "2026-10-16T02:44:09+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-openaire",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "d190f22dd1954ad3ba915721da2ce73b33403290",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/openaire/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/recurly",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-recurly",
   "scanned_at": "2026-10-16T02:44:12+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-recurly",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "4818a420e9394f0a6c66146d105c23f9a981c3bc",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/recurly/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/transport-feeds",
   "version": "0.1.2",
   "slug": "io-github-pipeworx-io-transport-feeds",
   "scanned_at": "2026-10-16T02:44:16+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-transport-feeds",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "4f886319d17b83496099e0faffb3f1f4fa068abd",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 427,
       "excerpt": "): Promise<Response> {\n  try {\n    return await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });\n  } catch (err) {\n    if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/transport-feeds/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 20 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pipeworx-io/useragent",
   "version": "0.1.1",
   "slug": "io-github-pipeworx-io-useragent",
   "scanned_at": "2026-10-16T02:44:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pipeworx-io/mcp-useragent",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": false,
   "repository_commit": "2fbeaa55e31caa4f87a63ea5dbf0732d7e8bf15f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://gateway.pipeworx.io/useragent/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at package.json:30",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 21 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pree-dew/mcp-bookmark",
   "version": "0.1.5",
   "slug": "io-github-pree-dew-mcp-bookmark",
   "scanned_at": "2026-10-16T02:44:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pree-dew/mcp-bookmark",
   "package": "pypi:mcp-bookmark-server@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at PKG-INFO:62; Secret Keyword at README.md:40; Secret Keyword at src/mcp_bookmark_server.egg-info/PKG-INFO:62",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 10,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 385 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (0 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "pyproject.toml declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pubnub/mcp-server",
   "version": "2.3.2",
   "slug": "io-github-pubnub-mcp-server",
   "scanned_at": "2026-10-16T02:44:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pubnub/pubnub-mcp-server",
   "package": "npm:@pubnub/mcp@2.3.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "84234f7b164f293947548c1a5a76e1ac4f9b9e45",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 56,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "scored on the declared repository at version 2.3.2, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/docs/api.ts",
       "line": 37,
       "excerpt": "  }\n\n  const response = await fetch(baseUrl + path, {\n    method: \"GET\",\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/portal/v1/api.ts",
       "line": 34,
       "excerpt": "  const credentials = getV1Credentials();\n\n  const response = await fetch(getUrl(\"/me\"), {\n    method: \"POST\",\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/portal/v1/api.ts",
       "line": 74,
       "excerpt": "  };\n\n  let response = await fetch(getUrl(path), requestOptions);\n\n  if (response.status === 401 || response.status === 403) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/portal/v1/api.ts",
       "line": 79,
       "excerpt": "    await authenticate();\n    requestOptions.headers[\"X-Session-Token\"] = sessionToken;\n    response = await fetch(getUrl(path), requestOptions);\n  }\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/lib/portal/v2/api.ts",
       "line": 39,
       "excerpt": "  };\n\n  const response = await fetch(getUrl(path), requestOptions);\n\n  if (!response.ok) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (0 issue(s) in the last 6 months, under `03` §5's floor of 3): 242.7 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 14 days (by releases), last release 149 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "5 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 49,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "capabilities are described only in vague terms — `03` §7's 30 band, which needs no inference to establish",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.pungggi/smart-terminal",
   "version": "1.2.40",
   "slug": "io-github-pungggi-smart-terminal",
   "scanned_at": "2026-10-16T02:44:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/pungggi/smart-terminal-mcp",
   "package": "npm:smart-terminal-mcp@1.2.40",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 20,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-dynamic-code-execution (critical/medium)",
       "detail": "Caller-influenced input reaches an evaluator. eval, the Function constructor and vm.runInNewContext all execute their argument; none of them sandbox anything by default, vm least of all despite the name.",
       "path": ".smithery/shttp/module.js",
       "line": 2948,
       "excerpt": "        if (this.opts.code.process)\n          sourceCode = this.opts.code.process(sourceCode, sch);\n        const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n        const validate = makeValidate(this, this.scope.get());\n        this.scope.value(validateName, { ref: validate });",
       "url": "",
       "finding": "mcp-js-dynamic-code-execution",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "scripts/publish.js",
       "line": 42,
       "excerpt": "  console.log(`\\n> Running: ${command}`);\n  try {\n    execSync(command, {\n      stdio: ['inherit', 'inherit', 'pipe'],\n      env: { ...process.env, ...extraEnv },",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "scripts/publish.js",
       "line": 253,
       "excerpt": "    const winPath = join(localAppData, 'mcp-publisher', 'mcp-publisher.exe');\n    try {\n      execSync(`\"${winPath}\" --help`, { stdio: 'ignore' });\n      return `\"${winPath}\"`;\n    } catch {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "scripts/publish.js",
       "line": 253,
       "excerpt": "    const winPath = join(localAppData, 'mcp-publisher', 'mcp-publisher.exe');\n    try {\n      execSync(`\"${winPath}\" --help`, { stdio: 'ignore' });\n      return `\"${winPath}\"`;\n    } catch {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 313,
       "excerpt": "          if (!vs)\n            continue;\n          const nameSet = usedValues[prefix] = usedValues[prefix] || /* @__PURE__ */ new Map();\n          vs.forEach((name) => {\n            if (nameSet.has(name))",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 4250,
       "excerpt": "            const schema = keywords[key];\n            if ($data && schema)\n              keywords[key] = schemaOrData(schema);\n          }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 8228,
       "excerpt": "    const obj = {};\n    for (const item of items) {\n      obj[item] = item;\n    }\n    return obj;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 8236,
       "excerpt": "    const filtered = {};\n    for (const k of validKeys) {\n      filtered[k] = obj[k];\n    }\n    return util2.objectValues(filtered);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 10448,
       "excerpt": "    for (const key in schema.shape) {\n      const fieldSchema = schema.shape[key];\n      newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n    }\n    return new ZodObject({",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 10716,
       "excerpt": "    for (const key of util.objectKeys(mask)) {\n      if (mask[key] && this.shape[key]) {\n        shape[key] = this.shape[key];\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 10728,
       "excerpt": "    for (const key of util.objectKeys(this.shape)) {\n      if (!mask[key]) {\n        shape[key] = this.shape[key];\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 10747,
       "excerpt": "      const fieldSchema = this.shape[key];\n      if (mask && !mask[key]) {\n        newShape[key] = fieldSchema;\n      } else {\n        newShape[key] = fieldSchema.optional();",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 10749,
       "excerpt": "        newShape[key] = fieldSchema;\n      } else {\n        newShape[key] = fieldSchema.optional();\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 10761,
       "excerpt": "    for (const key of util.objectKeys(this.shape)) {\n      if (mask && !mask[key]) {\n        newShape[key] = this.shape[key];\n      } else {\n        const fieldSchema = this.shape[key];",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 10768,
       "excerpt": "          newField = newField._def.innerType;\n        }\n        newShape[key] = newField;\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 11019,
       "excerpt": "        return { valid: false };\n      }\n      newObj[key] = sharedValue.data;\n    }\n    return { valid: true, data: newObj };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 11553,
       "excerpt": "    const enumValues = {};\n    for (const val of this._def.values) {\n      enumValues[val] = val;\n    }\n    return enumValues;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 11560,
       "excerpt": "    const enumValues = {};\n    for (const val of this._def.values) {\n      enumValues[val] = val;\n    }\n    return enumValues;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 11567,
       "excerpt": "    const enumValues = {};\n    for (const val of this._def.values) {\n      enumValues[val] = val;\n    }\n    return enumValues;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 12540,
       "excerpt": "    if (!mask[key])\n      continue;\n    newShape[key] = currDef.shape[key];\n  }\n  return clone(schema, {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 12604,
       "excerpt": "      if (!mask[key])\n        continue;\n      shape[key] = Class2 ? new Class2({\n        type: \"optional\",\n        innerType: oldShape[key]",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 12611,
       "excerpt": "  } else {\n    for (const key in oldShape) {\n      shape[key] = Class2 ? new Class2({\n        type: \"optional\",\n        innerType: oldShape[key]",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 12633,
       "excerpt": "      if (!mask[key])\n        continue;\n      shape[key] = new Class2({\n        type: \"nonoptional\",\n        innerType: oldShape[key]",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 12640,
       "excerpt": "  } else {\n    for (const key in oldShape) {\n      shape[key] = new Class2({\n        type: \"nonoptional\",\n        innerType: oldShape[key]",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 13888,
       "excerpt": "      const field = shape[key]._zod;\n      if (field.values) {\n        propValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set());\n        for (const v of field.values)\n          propValues[key].add(v);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 13906,
       "excerpt": "    let counter = 0;\n    for (const key of normalized.keys) {\n      ids[key] = `key_${counter++}`;\n    }\n    doc.write(`const newResult = {}`);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 14180,
       "excerpt": "        };\n      }\n      newObj[key] = sharedValue.data;\n    }\n    return { valid: true, data: newObj };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 14246,
       "excerpt": "                payload.issues.push(...prefixIssues(key, result2.issues));\n              }\n              payload.value[key] = result2.value;\n            }));\n          } else {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 14252,
       "excerpt": "              payload.issues.push(...prefixIssues(key, result.issues));\n            }\n            payload.value[key] = result.value;\n          }\n        }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 15358,
       "excerpt": "            const shape = def.shape;\n            for (const key in shape) {\n              json.properties[key] = this.process(shape[key], {\n                ...params,\n                path: [...params.path, \"properties\", key]",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 16595,
       "excerpt": "",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": ".smithery/shttp/module.js",
       "line": 19296,
       "excerpt": "",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/publish.js",
       "line": 186,
       "excerpt": "    changed = true;\n    if (filteredComments.length > 0) {\n      node[key] = filteredComments;\n      continue;\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at .smithery/shttp/manifest.json:697; Base64 High Entropy String at .smithery/shttp/module.js:18861",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "19 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (4 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 78,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.quotewise/mcp",
   "version": "1.0.3",
   "slug": "io-github-quotewise-mcp",
   "scanned_at": "2026-10-16T02:44:37+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/quotewise/mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "30aadb44f295185174db7df5346e34a364a1c96e",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 75,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) Authorization that are not required on every declared endpoint, and the source we fetched shows no enforcement — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://mcp.quotewise.io/",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.quotewise.io/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 47,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 248 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rajat79suri/visa-info",
   "version": "1.0.2",
   "slug": "io-github-rajat79suri-visa-info",
   "scanned_at": "2026-10-16T02:44:40+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/rajat79suri/visa-info-mcp",
   "package": "npm:visa-info-mcp@1.0.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.random-orbit/chemglyph",
   "version": "0.1.2",
   "slug": "io-github-random-orbit-chemglyph",
   "scanned_at": "2026-10-16T02:44:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/chemglyph/chemglyph",
   "package": "pypi:chemglyph@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 18,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at docs/registry_publish.md:22",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "4 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 63 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 30,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rdcahalane/genome-industrial-intelligence",
   "version": "0.1.0",
   "slug": "io-github-rdcahalane-genome-industrial-intelligence",
   "scanned_at": "2026-10-16T02:44:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "",
   "package": "pypi:genome-industrial-intelligence@0.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://genome-api-production.up.railway.app/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (ANTHROPIC_API_KEY, GENOME_API_KEY, GENOME_COMMERCIAL_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "pyproject.toml declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.reefapi/reefapi-mcp",
   "version": "1.27.2",
   "slug": "io-github-reefapi-reefapi-mcp",
   "scanned_at": "2026-10-16T02:44:49+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/reefapi/reefapi-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): Authorization; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.reefapi.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/reefapi/reefapi-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rendleyhq/rendley-mcp",
   "version": "1.0.1",
   "slug": "io-github-rendleyhq-rendley-mcp",
   "scanned_at": "2026-10-16T02:44:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/rendleyhq/rendley-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "bc2c0d0bee374c87699a21bcc666c0efb7941a03",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 48,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/api/client.ts",
       "line": 272,
       "excerpt": "\n  private async request(path: string, init: RequestInit = {}): Promise<Response> {\n    const res = await fetch(this.url(path), {\n      ...init,\n      signal: init.signal ?? AbortSignal.timeout(30_000),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/api/client.ts",
       "line": 522,
       "excerpt": "\n  async getEditorSessionToken(projectId: string): Promise<string> {\n    const res = await fetch(this.url(\"/auth/session-token\"), {\n      method: \"POST\",\n      headers: this.headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/brandkit/upload.ts",
       "line": 56,
       "excerpt": "  });\n\n  const put = await fetch(created.presigned_url, {\n    method: \"PUT\",\n    headers: { \"Content-Type\": mimeType },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/http/uploads.ts",
       "line": 40,
       "excerpt": "  signal: AbortSignal | undefined,\n): Promise<{ ok: boolean; status: number; body: string }> {\n  const res = await fetch(presignedUrl, {\n    method: \"PUT\",\n    body: bytes,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/utils/url-guard.ts",
       "line": 48,
       "excerpt": "  validateExternalUrl(rawUrl);\n\n  const res = await fetch(rawUrl, {\n    headers: opts.headers,\n    signal: AbortSignal.timeout(opts.timeoutMs),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (inbound token verification) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.rendley.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "credentials are read from the environment (POSTHOG_API_KEY) and documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "18 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 88 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 9,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 5,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.29.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-88fw-hqm2-52qc",
       "detail": "direct, CVSS 7.1, fixed in 4.12.25",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88fw-hqm2-52qc",
       "finding": "hono:GHSA-88fw-hqm2-52qc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-9vqf-7f2p-gf9v",
       "detail": "direct, CVSS 6.5, fixed in 4.12.16",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9vqf-7f2p-gf9v",
       "finding": "hono:GHSA-9vqf-7f2p-gf9v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-gqvv-2mrq-wpjv",
       "detail": "direct, CVSS 6.5, fixed in 4.13.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.30 — GHSA-gqvv-2mrq-wpjv",
       "detail": "direct, CVSS 6.5, fixed in 4.13.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-hvrm-45r6-mjfj",
       "detail": "direct, CVSS 6.5, fixed in 4.12.27",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hvrm-45r6-mjfj",
       "finding": "hono:GHSA-hvrm-45r6-mjfj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-rv63-4mwf-qqc2",
       "detail": "direct, CVSS 6.5, fixed in 4.12.25",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rv63-4mwf-qqc2",
       "finding": "hono:GHSA-rv63-4mwf-qqc2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-w62v-xxxg-mg59",
       "detail": "direct, CVSS 6.1, fixed in 4.12.27",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w62v-xxxg-mg59",
       "finding": "hono:GHSA-w62v-xxxg-mg59",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-crvj-82cr-hjcx",
       "detail": "direct, CVSS 5.9, fixed in 4.13.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.30 — GHSA-crvj-82cr-hjcx",
       "detail": "direct, CVSS 5.9, fixed in 4.13.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-wwfh-h76j-fc44",
       "detail": "direct, CVSS 5.9, fixed in 4.12.25",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wwfh-h76j-fc44",
       "finding": "hono:GHSA-wwfh-h76j-fc44",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-2gcr-mfcq-wcc3",
       "detail": "direct, CVSS 5.3, fixed in 4.12.21",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2gcr-mfcq-wcc3",
       "finding": "hono:GHSA-2gcr-mfcq-wcc3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-54fx-42gc-7vw4",
       "detail": "direct, CVSS 5.3, fixed in 4.12.34",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.30 — GHSA-54fx-42gc-7vw4",
       "detail": "direct, CVSS 5.3, fixed in 4.12.34",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-8j4g-w8fx-2239",
       "detail": "direct, CVSS 5.3, fixed in 4.12.34",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.30 — GHSA-8j4g-w8fx-2239",
       "detail": "direct, CVSS 5.3, fixed in 4.12.34",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-g6gw-c38x-mqfc",
       "detail": "direct, CVSS 5.3, fixed in 4.13.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.30 — GHSA-g6gw-c38x-mqfc",
       "detail": "direct, CVSS 5.3, fixed in 4.13.5",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-j6c9-x7qj-28xf",
       "detail": "direct, CVSS 5.3, fixed in 4.12.25",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6c9-x7qj-28xf",
       "finding": "hono:GHSA-j6c9-x7qj-28xf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-p77w-8qqv-26rm",
       "detail": "direct, CVSS 5.3, fixed in 4.12.18",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p77w-8qqv-26rm",
       "finding": "hono:GHSA-p77w-8qqv-26rm",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-xrhx-7g5j-rcj5",
       "detail": "direct, CVSS 5.3, fixed in 4.12.21",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xrhx-7g5j-rcj5",
       "finding": "hono:GHSA-xrhx-7g5j-rcj5",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-f23p-vx2j-j53r",
       "detail": "direct, CVSS 4.8, fixed in 4.12.34",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.30 — GHSA-f23p-vx2j-j53r",
       "detail": "direct, CVSS 4.8, fixed in 4.12.34",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-f577-qrjj-4474",
       "detail": "direct, CVSS 4.8, fixed in 4.12.21",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f577-qrjj-4474",
       "finding": "hono:GHSA-f577-qrjj-4474",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-wgpf-jwqj-8h8p",
       "detail": "direct, CVSS 4.8, fixed in 4.12.25",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wgpf-jwqj-8h8p",
       "finding": "hono:GHSA-wgpf-jwqj-8h8p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-xgm2-5f3f-mvvc",
       "detail": "direct, CVSS 4.8, fixed in 4.12.27",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xgm2-5f3f-mvvc",
       "finding": "hono:GHSA-xgm2-5f3f-mvvc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-69xw-7hcm-h432",
       "detail": "direct, CVSS 4.7, fixed in 4.12.16",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-69xw-7hcm-h432",
       "finding": "hono:GHSA-69xw-7hcm-h432",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-hxh3-vqpv-xpqv",
       "detail": "direct, CVSS 4.7, fixed in 4.13.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.30 — GHSA-hxh3-vqpv-xpqv",
       "detail": "direct, CVSS 4.7, fixed in 4.13.7",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-3hrh-pfw6-9m5x",
       "detail": "direct, CVSS 4.3, fixed in 4.12.21",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3hrh-pfw6-9m5x",
       "finding": "hono:GHSA-3hrh-pfw6-9m5x",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.14 — GHSA-qp7p-654g-cw7p",
       "detail": "direct, CVSS 4.3, fixed in 4.12.18",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qp7p-654g-cw7p",
       "finding": "hono:GHSA-qp7p-654g-cw7p",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-copy 4.0.3 — GHSA-jggr-w7fw-pc2j",
       "detail": "transitive, CVSS 6.3, fixed in 4.1.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jggr-w7fw-pc2j",
       "finding": "fast-copy:GHSA-jggr-w7fw-pc2j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.1 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@hono/node-server 1.19.14 — GHSA-frvp-7c67-39w9",
       "detail": "transitive, CVSS 5.9, fixed in 1.19.15",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-frvp-7c67-39w9",
       "finding": "@hono/node-server:GHSA-frvp-7c67-39w9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-v2v4-37r5-5v8g",
       "detail": "transitive, CVSS 5.3, fixed in 10.1.1",
       "path": "bun.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2v4-37r5-5v8g",
       "finding": "ip-address:GHSA-v2v4-37r5-5v8g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 29,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rijul170/sophos-central-mcp",
   "version": "1.1.0",
   "slug": "io-github-rijul170-sophos-central-mcp",
   "scanned_at": "2026-10-16T02:44:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/rijul170/sophos-central-mcp",
   "package": "npm:@rijul170/sophos-mcp@1.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "8821938ab90324d400824deb1db243a623e527f6",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 42,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository at version 1.1.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client/sophos-client.ts",
       "line": 104,
       "excerpt": "        let response: Response;\n        try {\n          response = await fetch(url, { ...fetchOptions, signal: controller.signal });\n          clearTimeout(timeoutId);\n        } catch (err) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:132; Secret Keyword at build/tools/playbook-tools.js:1545",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 82 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rocnubie/flowmusicai-mcp",
   "version": "0.1.0",
   "slug": "io-github-rocnubie-flowmusicai-mcp",
   "scanned_at": "2026-10-16T02:45:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/rocnubie/flowmusicai-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "unknown",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "401e19360d15a17f560d4acb794bf0afebfc8ce6",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.35",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "the registry entry declares no transport for any package or remote",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 148 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rocnubie/tiermakerlist-mcp",
   "version": "0.1.0",
   "slug": "io-github-rocnubie-tiermakerlist-mcp",
   "scanned_at": "2026-10-16T02:45:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/rocnubie/tiermakerlist-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "unknown",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "5d35b97db562b87b1f5962bbaaca020a1846ad1f",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.35",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "the registry entry declares no transport for any package or remote",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "2 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 80 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rogerberent-netizen/docverdict",
   "version": "1.0.0",
   "slug": "io-github-rogerberent-netizen-docverdict",
   "scanned_at": "2026-10-16T02:45:09+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/rogerberent-netizen/docverdict",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 68,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares credential header(s) Authorization that are not required on every declared endpoint — `03` §4's \"authentication present but optional\" band; 1 of 1 declared remote endpoint(s) require no credential header: https://api.docverdict.com/api/mcp",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://api.docverdict.com/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/rogerberent-netizen/docverdict) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rohith1125/sentinel-execution-mcp",
   "version": "0.1.2",
   "slug": "io-github-rohith1125-sentinel-execution-mcp",
   "scanned_at": "2026-10-16T02:45:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/rohith1125/sentinel-execution-mcp",
   "package": "npm:sentinel-execution-mcp@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "2f8bc9f34d83b48897ec152da4a895bae9b30185",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2736,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 0,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 70,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/_pytest/_code/code.py",
       "line": 170,
       "excerpt": "        f_locals = self.f_locals.copy()\n        f_locals.update(vars)\n        return eval(code, self.f_globals, f_locals)\n\n    def repr(self, object: object) -> str:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/_pytest/_py/path.py",
       "line": 1153,
       "excerpt": "                try:\n                    with open(str(self), \"rb\") as f:\n                        exec(f.read(), mod.__dict__)\n                except BaseException:\n                    del sys.modules[modname]",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/_pytest/assertion/rewrite.py",
       "line": 197,
       "excerpt": "        else:\n            state.trace(f\"found cached rewritten pyc for {fn}\")\n        exec(co, module.__dict__)\n\n    def _early_rewrite_bailout(self, name: str, state: AssertionState) -> bool:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/_pytest/mark/expression.py",
       "line": 353,
       "excerpt": "            matcher supports all expressions.\n        \"\"\"\n        return bool(eval(self._code, {\"__builtins__\": {}}, MatcherAdapter(matcher)))",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/_pytest/pytester.py",
       "line": 295,
       "excerpt": "                if call._name == name:\n                    print(\"NAMEMATCH\", name, call)\n                    if eval(check, backlocals, call.__dict__):\n                        print(\"CHECKERMATCH\", repr(check), \"->\", call)\n                    else:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/_pytest/skipping.py",
       "line": 119,
       "excerpt": "            filename = f\"<{mark.name} condition>\"\n            condition_code = compile(condition, filename, \"eval\")\n            result = eval(condition_code, globals_)\n        except SyntaxError as exc:\n            msglines = [",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/alembic/operations/base.py",
       "line": 189,
       "excerpt": "            lcl: Dict[str, Any] = {}\n\n            exec(func_text, globals_, lcl)\n            setattr(cls, name, lcl[name])\n            fn.__func__.__doc__ = (",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/alembic/util/langhelpers.py",
       "line": 219,
       "excerpt": "        lcl: MutableMapping[str, Any] = {}\n\n        exec(func_text, cast(\"Dict[str, Any]\", globals_), lcl)\n        return cast(\"Callable[..., Any]\", lcl[name])\n",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-pickle-loads (critical/medium)",
       "detail": "Attacker-reachable input is unpickled. pickle executes constructors during load, so a crafted payload is arbitrary code execution — this is not a hardening issue, it is the documented behaviour of the format.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/anyio/to_interpreter.py",
       "line": 130,
       "excerpt": "            (res, is_exception), fmt = res[:2]\n            if fmt == FMT_PICKLED:\n                res = pickle.loads(res)\n\n            if is_exception:",
       "url": "",
       "finding": "mcp-python-pickle-loads",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-pickle-loads (critical/medium)",
       "detail": "Attacker-reachable input is unpickled. pickle executes constructors during load, so a crafted payload is arbitrary code execution — this is not a hardening issue, it is the documented behaviour of the format.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/anyio/to_process.py",
       "line": 94,
       "excerpt": "                raise BrokenWorkerProcess from exc\n\n        retval = pickle.loads(pickled_response)\n        if status == b\"EXCEPTION\":\n            assert isinstance(retval, BaseException)",
       "url": "",
       "finding": "mcp-python-pickle-loads",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-pickle-loads (critical/medium)",
       "detail": "Attacker-reachable input is unpickled. pickle executes constructors during load, so a crafted payload is arbitrary code execution — this is not a hardening issue, it is the documented behaviour of the format.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/anyio/to_process.py",
       "line": 218,
       "excerpt": "        retval = exception = None\n        try:\n            command, *args = pickle.load(stdin.buffer)\n        except EOFError:\n            return",
       "url": "",
       "finding": "mcp-python-pickle-loads",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/asyncpg/connection.py",
       "line": 2731,
       "excerpt": "    frame = sys._getframe().f_back\n    try:\n        stack = traceback.StackSummary.extract(\n            traceback.walk_stack(frame), lookup_lines=False)\n    finally:",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/coverage/execfile.py",
       "line": 213,
       "excerpt": "        cwd = os.getcwd()\n        try:\n            exec(code, main_mod.__dict__)\n        except SystemExit:  # pylint: disable=try-except-raise\n            # The user called sys.exit().  Just pass it along to the upper",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/coverage/parser.py",
       "line": 589,
       "excerpt": "        case ast.Name():\n            if node.id in [\"True\", \"False\", \"None\", \"__debug__\"]:\n                return True, eval(node.id)  # pylint: disable=eval-used\n        case ast.UnaryOp():\n            if isinstance(node.op, ast.Not):",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/coverage/templite.py",
       "line": 74,
       "excerpt": "        # Execute the source, defining globals, and return them.\n        global_namespace: dict[str, Any] = {}\n        exec(python_source, global_namespace)\n        return global_namespace\n",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/dateutil/zoneinfo/rebuild.py",
       "line": 24,
       "excerpt": "        with TarFile.open(filename) as tf:\n            for name in zonegroups:\n                tf.extract(name, tmpdir)\n            filepaths = [os.path.join(tmpdir, n) for n in zonegroups]\n",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/codegen.py",
       "line": 117,
       "excerpt": "            args = node.get_argument_expressions()\n            filtered = len(node.filter_args.args) > 0\n            buffered = eval(node.attributes.get(\"buffered\", \"False\"))\n            cached = eval(node.attributes.get(\"cached\", \"False\"))\n            defs = None",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/codegen.py",
       "line": 118,
       "excerpt": "            filtered = len(node.filter_args.args) > 0\n            buffered = eval(node.attributes.get(\"buffered\", \"False\"))\n            cached = eval(node.attributes.get(\"cached\", \"False\"))\n            defs = None\n            pagetag = None",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/codegen.py",
       "line": 131,
       "excerpt": "                if not pagetag.body_decl.kwargs:\n                    args += [\"**pageargs\"]\n                cached = eval(pagetag.attributes.get(\"cached\", \"False\"))\n                self.compiler.enable_loop = self.compiler.enable_loop or eval(\n                    pagetag.attributes.get(\"enable_loop\", \"False\")",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/codegen.py",
       "line": 132,
       "excerpt": "                    args += [\"**pageargs\"]\n                cached = eval(pagetag.attributes.get(\"cached\", \"False\"))\n                self.compiler.enable_loop = self.compiler.enable_loop or eval(\n                    pagetag.attributes.get(\"enable_loop\", \"False\")\n                )",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/codegen.py",
       "line": 441,
       "excerpt": "                    % (node.name, callable_name)\n                )\n            if eval(node.attributes.get(\"inheritable\", \"False\")):\n                self.printer.writeline(\"context['self'].%s = ns\" % (node.name))\n",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/codegen.py",
       "line": 611,
       "excerpt": "        )\n        filtered = len(node.filter_args.args) > 0\n        buffered = eval(node.attributes.get(\"buffered\", \"False\"))\n        cached = eval(node.attributes.get(\"cached\", \"False\"))\n        self.printer.writelines(",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/codegen.py",
       "line": 612,
       "excerpt": "        filtered = len(node.filter_args.args) > 0\n        buffered = eval(node.attributes.get(\"buffered\", \"False\"))\n        cached = eval(node.attributes.get(\"cached\", \"False\"))\n        self.printer.writelines(\n            # push new frame, assign current frame to __M_caller",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/codegen.py",
       "line": 725,
       "excerpt": "        )\n        if \"timeout\" in cache_args:\n            cache_args[\"timeout\"] = int(eval(cache_args[\"timeout\"]))\n\n        self.printer.writeline(\"def %s(%s):\" % (name, \",\".join(args)))",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/mako/template.py",
       "line": 681,
       "excerpt": "\n    # this exec() works for 2.4->3.3.\n    exec(code, module.__dict__, module.__dict__)\n    return (source, module)\n",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/auxfuncs.py",
       "line": 632,
       "excerpt": "        l1 = '%s,f%d=f[%d]' % (l1, i, i)\n        l2.append('f%d(v)' % (i))\n    return eval(f\"{l1}:{' and '.join(l2)}\")\n\n",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/auxfuncs.py",
       "line": 640,
       "excerpt": "        l1 = '%s,f%d=f[%d]' % (l1, i, i)\n        l2.append('f%d(v)' % (i))\n    return eval(f\"{l1}:{' or '.join(l2)}\")\n\n",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/capi_maps.py",
       "line": 159,
       "excerpt": "        outmess(f'Reading f2cmap from {f2cmap_file!r} ...\\n')\n        with open(f2cmap_file) as f:\n            d = eval(f.read().lower(), {}, {})\n        f2cmap_all, f2cmap_mapped = process_f2cmap_dict(f2cmap_all, d, c2py_map, True)\n        outmess('Successfully applied user defined f2cmap changes\\n')",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/capi_maps.py",
       "line": 296,
       "excerpt": "        ret['size'] = '*'.join(dim)\n        try:\n            ret['size'] = repr(eval(ret['size']))\n        except Exception:\n            pass",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/capi_maps.py",
       "line": 449,
       "excerpt": "                        v[1:-1]).split('@,@')\n                else:\n                    v = eval(v, {}, {})\n                    ret['init.r'], ret['init.i'] = str(v.real), str(v.imag)\n            except Exception:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 1329,
       "excerpt": "                        replace(',', '+1j*(')\n            try:\n                v = eval(initexpr, {}, params)\n            except (SyntaxError, NameError, TypeError) as msg:\n                errmess('analyzeline: Failed to evaluate %r. Ignoring: %s\\n'",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 2271,
       "excerpt": "def myeval(e, g=None, l=None):\n    \"\"\" Like `eval` but returns only integers and floats \"\"\"\n    r = eval(e, g, l)\n    if type(r) in [int, float]:\n        return r",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 2559,
       "excerpt": "    try:\n        # TODO: use symbolic from PR #19805\n        value = eval(value, {}, params)\n        value = (repr if isinstance(value, str) else str)(value)\n    except (NameError, SyntaxError, TypeError):",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 2637,
       "excerpt": "                l = vars[n]['charselector']['len']\n                try:\n                    l = str(eval(l, {}, params))\n                except Exception:\n                    pass",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 2646,
       "excerpt": "                l = vars[n]['kindselector']['kind']\n                try:\n                    l = str(eval(l, {}, params))\n                except Exception:\n                    pass",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 2914,
       "excerpt": "                            if 'kind' in kindselect:\n                                try:\n                                    kindselect['kind'] = eval(\n                                        kindselect['kind'], {}, params)\n                                except Exception:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 2985,
       "excerpt": "    if dimspec is None:\n        try:\n            p = eval(v, g_params, params)\n        except Exception as msg:\n            p = v",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 3016,
       "excerpt": "    for item in v:\n        try:\n            item = eval(item, g_params, params)\n        except Exception as msg:\n            outmess(f'param_eval: got \"{msg}\" on {item!r}\\n')",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/f2py/crackfortran.py",
       "line": 3468,
       "excerpt": "            if vars[a]['typespec'] in ['complex', 'double complex']:\n                try:\n                    v = eval(v)\n                    v = f'({v.real},{v.imag})'\n                except Exception:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-pickle-loads (critical/medium)",
       "detail": "Attacker-reachable input is unpickled. pickle executes constructors during load, so a crafted payload is arbitrary code execution — this is not a hardening issue, it is the documented behaviour of the format.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/lib/_format_impl.py",
       "line": 838,
       "excerpt": "            pickle_kwargs = {}\n        try:\n            array = pickle.load(fp, **pickle_kwargs)\n        except UnicodeError as err:\n            # Friendlier error message",
       "url": "",
       "finding": "mcp-python-pickle-loads",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-pickle-loads (critical/medium)",
       "detail": "Attacker-reachable input is unpickled. pickle executes constructors during load, so a crafted payload is arbitrary code execution — this is not a hardening issue, it is the documented behaviour of the format.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/lib/_npyio_impl.py",
       "line": 494,
       "excerpt": "                    \"`allow_pickle=` keyword argument or `pickle.load()`.\")\n            try:\n                return pickle.load(fid, **pickle_kwargs)\n            except Exception as e:\n                raise pickle.UnpicklingError(",
       "url": "",
       "finding": "mcp-python-pickle-loads",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/testing/_private/utils.py",
       "line": 1346,
       "excerpt": "\ndef runstring(astr, dict):\n    exec(astr, dict)\n\n",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/numpy/testing/_private/utils.py",
       "line": 1632,
       "excerpt": "    while i < times:\n        i += 1\n        exec(code, globs, locs)\n    elapsed = jiffies() - elapsed\n    return 0.01 * elapsed",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/pandas/core/computation/ops.py",
       "line": 425,
       "excerpt": "                from pandas.core.computation.eval import eval\n\n                res = eval(self, local_dict=env, engine=engine, parser=parser)\n\n        name = env.add_tmp(res)",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-pickle-loads (critical/medium)",
       "detail": "Attacker-reachable input is unpickled. pickle executes constructors during load, so a crafted payload is arbitrary code execution — this is not a hardening issue, it is the documented behaviour of the format.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/pandas/io/pickle.py",
       "line": 233,
       "excerpt": "                # We want to silence any warnings about, e.g. moved modules.\n                warnings.simplefilter(\"ignore\", Warning)\n                return pickle.load(handles.handle)\n        except excs_to_catch:\n            # e.g.",
       "url": "",
       "finding": "mcp-python-pickle-loads",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/pandas/plotting/_matplotlib/core.py",
       "line": 425,
       "excerpt": "            idx_locs = columns.get_indexer_for(group)\n            if (idx_locs == -1).any():\n                bad_labels = np.extract(idx_locs == -1, group)\n                raise ValueError(\n                    f\"Column label(s) {list(bad_labels)} not found in the DataFrame.\"",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-shell-true-nonliteral (critical/medium)",
       "detail": "A subprocess is spawned with shell=True on a value that is not a string literal. Any caller-supplied component of that value is shell-injectable: `; rm -rf ~` in an argument is executed, not passed.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/pip/_internal/commands/configuration.py",
       "line": 247,
       "excerpt": "\n        try:\n            subprocess.check_call(f'{editor} \"{fname}\"', shell=True)\n        except FileNotFoundError as e:\n            if not e.filename:",
       "url": "",
       "finding": "mcp-python-shell-true-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/pip/_vendor/distlib/util.py",
       "line": 1285,
       "excerpt": "        archive.extraction_filter = extraction_filter\n\n        archive.extractall(dest_dir)\n\n    finally:",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py",
       "line": 1714,
       "excerpt": "            source = _read_utf8_with_fallback(script_filename)\n            code = compile(source, script_filename, 'exec')\n            exec(code, namespace, namespace)\n        else:\n            from linecache import cache",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-eval-exec-nonliteral (critical/medium)",
       "detail": "eval/exec is called on a value that is not a literal. If any component is caller-supplied this is direct code execution in the server's process.",
       "path": "packages/engine/.venv312/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py",
       "line": 1725,
       "excerpt": "            )\n            script_code = compile(script_text, script_filename, 'exec')\n            exec(script_code, namespace, namespace)\n\n    def _has(self, path) -> bool:",
       "url": "",
       "finding": "mcp-python-eval-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 210 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.rudimentall1/agent-guardrail",
   "version": "1.0.2",
   "slug": "io-github-rudimentall1-agent-guardrail",
   "scanned_at": "2026-10-16T02:45:40+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/rudimentall1/agent-guardrail",
   "package": "pypi:guardrail-mcp@1.0.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 16,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 24 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/acam-ok",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-acam-ok",
   "scanned_at": "2026-10-16T02:45:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/acam-ok/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/au-postcode",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-au-postcode",
   "scanned_at": "2026-10-16T02:45:46+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/au-postcode/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/ca-postcode",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-ca-postcode",
   "scanned_at": "2026-10-16T02:45:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/ca-postcode/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/cc-fm",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-cc-fm",
   "scanned_at": "2026-10-16T02:45:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/cc-fm/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/cc-hk",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-cc-hk",
   "scanned_at": "2026-10-16T02:45:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/cc-hk/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/cc-is",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-cc-is",
   "scanned_at": "2026-10-16T02:46:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/cc-is/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/cc-lv",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-cc-lv",
   "scanned_at": "2026-10-16T02:46:07+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/cc-lv/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/cc-sy",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-cc-sy",
   "scanned_at": "2026-10-16T02:46:11+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/cc-sy/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/cc-tk",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-cc-tk",
   "scanned_at": "2026-10-16T02:46:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/cc-tk/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/crc16-len",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-crc16-len",
   "scanned_at": "2026-10-16T02:46:19+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/crc16-len/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/em-mm",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-em-mm",
   "scanned_at": "2026-10-16T02:46:23+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/em-mm/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/file-ext-ok",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-file-ext-ok",
   "scanned_at": "2026-10-16T02:46:27+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/file-ext-ok/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/fx-aud",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-fx-aud",
   "scanned_at": "2026-10-16T02:46:31+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/fx-aud/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/fx-nok",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-fx-nok",
   "scanned_at": "2026-10-16T02:46:35+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/fx-nok/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/gpm-lps",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-gpm-lps",
   "scanned_at": "2026-10-16T02:46:38+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/gpm-lps/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/if-unmod-ok",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-if-unmod-ok",
   "scanned_at": "2026-10-16T02:46:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/if-unmod-ok/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/json-bytes",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-json-bytes",
   "scanned_at": "2026-10-16T02:46:47+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/json-bytes/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/lang-bn",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-lang-bn",
   "scanned_at": "2026-10-16T02:46:51+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/lang-bn/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/mime-yaml",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-mime-yaml",
   "scanned_at": "2026-10-16T02:46:55+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/mime-yaml/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/offset-utc",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-offset-utc",
   "scanned_at": "2026-10-16T02:46:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/offset-utc/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/png-magic",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-png-magic",
   "scanned_at": "2026-10-16T02:47:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/png-magic/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/puppet-ok",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-puppet-ok",
   "scanned_at": "2026-10-16T02:47:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/puppet-ok/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/redirect-hop-ok",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-redirect-hop-ok",
   "scanned_at": "2026-10-16T02:47:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/redirect-hop-ok/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/redis-url-shape",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-redis-url-shape",
   "scanned_at": "2026-10-16T02:47:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/redis-url-shape/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/rfc-status",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-rfc-status",
   "scanned_at": "2026-10-16T02:47:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/rfc-status/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/st-hi",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-st-hi",
   "scanned_at": "2026-10-16T02:47:22+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/st-hi/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/st-wa",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-st-wa",
   "scanned_at": "2026-10-16T02:47:27+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/st-wa/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/tz-africa-harare",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-tz-africa-harare",
   "scanned_at": "2026-10-16T02:47:31+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/tz-africa-harare/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/tz-europe-budapest",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-tz-europe-budapest",
   "scanned_at": "2026-10-16T02:47:35+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/tz-europe-budapest/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/tz-europe-kyiv",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-tz-europe-kyiv",
   "scanned_at": "2026-10-16T02:47:38+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/tz-europe-kyiv/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/tz-europe-uzhgorod",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-tz-europe-uzhgorod",
   "scanned_at": "2026-10-16T02:47:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/tz-europe-uzhgorod/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/tz-pacific-guadalcanal",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-tz-pacific-guadalcanal",
   "scanned_at": "2026-10-16T02:47:46+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/tz-pacific-guadalcanal/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/upper-ok",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-upper-ok",
   "scanned_at": "2026-10-16T02:47:50+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/upper-ok/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/util-010",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-util-010",
   "scanned_at": "2026-10-16T02:47:54+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/util-010/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/util-113",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-util-113",
   "scanned_at": "2026-10-16T02:47:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/util-113/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sadri-dridi/uuid6-ok",
   "version": "1.0.0",
   "slug": "io-github-sadri-dridi-uuid6-ok",
   "scanned_at": "2026-10-16T02:48:02+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/sadri-dridi/named-mcp-utilities",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "f628fbbad45a8fb516832e9cf96d9e0524db7cea",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://agent-observatory-sensor.nolimit-observatory.workers.dev/s/uuid6-ok/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 23 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 5,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sandraschi/leanforge-mcp",
   "version": "0.1.0",
   "slug": "io-github-sandraschi-leanforge-mcp",
   "scanned_at": "2026-10-16T02:48:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/sandraschi/leanforge-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "67592f6bf91a45a5527a37a8c53a52fad7c0fc09",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 46,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 86,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "src/leanforge_mcp/core/job_manager.py",
       "line": 139,
       "excerpt": "            if col not in existing:\n                logger.info(\"Migrating jobs table: adding column %s\", col)\n                await db.execute(f\"ALTER TABLE jobs ADD COLUMN {col} {col_type}\")\n\n    def _owner_alive(self, pid: int | None, started_at: float | None) -> bool:",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-sql-string-built (medium/medium)",
       "detail": "A SQL statement is assembled by string building rather than passed as a parameterised query. Every driver here accepts parameters as a second argument; building the string is never necessary.",
       "path": "webapp/backend/routes/problems.py",
       "line": 128,
       "excerpt": "    db_path = request.app.state.config.database.path\n    async with aiosqlite.connect(db_path) as db:\n        await db.execute(\n            f\"UPDATE problems SET {', '.join(fields)} WHERE id=?\", values\n        )",
       "url": "",
       "finding": "mcp-python-sql-string-built",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/cua-smoke.py",
       "line": 151,
       "excerpt": "                headers={\"Content-Type\": \"application/json\"},\n            )\n            resp = urllib.request.urlopen(r, timeout=30)\n            return json.loads(resp.read())\n        except Exception as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/cua-smoke.py",
       "line": 349,
       "excerpt": "    for attempt in range(MAX_RETRY):\n        try:\n            resp = urllib.request.urlopen(f\"{BACKEND_URL}{HEALTH_PATH}\", timeout=5)\n            if resp.status == 200:\n                log(f\"Backend healthy (attempt {attempt + 1})\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/cua-smoke.py",
       "line": 393,
       "excerpt": "def check_feature_route():\n    try:\n        resp = urllib.request.urlopen(f\"{BACKEND_URL}{FEATURE_PATH}\", timeout=5)\n        body = json.loads(resp.read())\n        log(f\"Feature route {FEATURE_PATH}: HTTP {resp.status}\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "scripts/cua-smoke.py",
       "line": 406,
       "excerpt": "def check_diagnostics():\n    try:\n        resp = urllib.request.urlopen(f\"{BACKEND_URL}{DIAGNOSTICS_PATH}\", timeout=5)\n        data = json.loads(resp.read())\n        if data.get(\"success\"):",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "webapp/frontend/src/pages/ProblemLibrary.tsx",
       "line": 50,
       "excerpt": "  const handleSubmitJob = async (p: Problem) => {\n    const source = p.lean_source || `import Mathlib\\n\\ntheorem ${p.title.replace(/\\s+/g, \"_\")} : ${p.statement} := by\\n  sorry\\n`;\n    const res = await fetch(API_BASE + \"/jobs\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 11 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at CLAUDE.md:99; Secret Keyword at INSTALL.md:69; Secret Keyword at INSTALL.md:70; Secret Keyword at config.example.toml:54; Secret Keyword at config.example.toml:63; Secret Keyword at docs/CONFIGURATION.md:107; Secret Keyword at docs/CONFIGURATION.md:108; Hex High Entropy String at server.json:14; Secret Keyword at src/leanforge_mcp/core/config.py:45; Secret Keyword at src/leanforge_mcp/core/config.py:53; …and 1 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "8 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 10,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-fx2h-pf6j-xcff",
       "detail": "direct, CVSS 8.2, fixed in 6.4.3",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fx2h-pf6j-xcff",
       "finding": "vite:GHSA-fx2h-pf6j-xcff",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.16 — GHSA-r28c-9q8g-f849",
       "detail": "direct, CVSS 7.5, fixed in 8.5.18",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r28c-9q8g-f849",
       "finding": "postcss:GHSA-r28c-9q8g-f849",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 48.0.1 — PYSEC-2026-3553",
       "detail": "transitive, CVSS 8.7, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "source-map-js 1.2.1 — GHSA-68fv-2mgg-jv7q",
       "detail": "transitive, CVSS 8.7, fixed in 1.2.2",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-68fv-2mgg-jv7q",
       "finding": "source-map-js:GHSA-68fv-2mgg-jv7q",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 48.0.1 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.15 — GHSA-28wg-ghj8-5hjv",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.16",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-28wg-ghj8-5hjv",
       "finding": "nanoid:GHSA-28wg-ghj8-5hjv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "nanoid 3.3.15 — GHSA-2v37-7h3g-55p8",
       "detail": "transitive, CVSS 8.2, fixed in 3.3.18",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2v37-7h3g-55p8",
       "finding": "nanoid:GHSA-2v37-7h3g-55p8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.27.2 — PYSEC-2026-3483",
       "detail": "transitive, CVSS 7.6, fixed in 1.28.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3483",
       "finding": "mcp:PYSEC-2026-3483",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.5 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.5 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.27.2 — GHSA-84m7-p3x7-pcfv",
       "detail": "transitive, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "starlette 1.2.1 — PYSEC-2026-249",
       "detail": "transitive, CVSS 7.5, fixed in 1.3.1",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-249",
       "finding": "starlette:PYSEC-2026-249",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4143",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4143",
       "finding": "pyjwt:PYSEC-2026-4143",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4150",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4150",
       "finding": "pyjwt:PYSEC-2026-4150",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4151",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4151",
       "finding": "pyjwt:PYSEC-2026-4151",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "react-router-dom 6.30.4 — GHSA-jjmj-jmhj-qwj2",
       "detail": "direct, CVSS 6.9, fixed in 6.30.6",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jjmj-jmhj-qwj2",
       "finding": "react-router-dom:GHSA-jjmj-jmhj-qwj2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss 8.5.16 — GHSA-fxqj-rqcc-2cmp",
       "detail": "direct, CVSS 6.3, fixed in 8.5.23",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fxqj-rqcc-2cmp",
       "finding": "postcss:GHSA-fxqj-rqcc-2cmp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-4w7w-66w2-5vf9",
       "detail": "direct, CVSS 6.3, fixed in 6.4.2",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4w7w-66w2-5vf9",
       "finding": "vite:GHSA-4w7w-66w2-5vf9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vite 5.4.21 — GHSA-v6wh-96g9-6wx3",
       "detail": "direct, CVSS 5.5, fixed in 6.4.3",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v6wh-96g9-6wx3",
       "finding": "vite:GHSA-v6wh-96g9-6wx3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 48.0.1 — PYSEC-2026-3554",
       "detail": "transitive, CVSS 6.9, fixed in 49.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3554",
       "finding": "cryptography:PYSEC-2026-3554",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "baseline-browser-mapping 2.10.42 — GHSA-w5vr-8v7q-w6rv",
       "detail": "transitive, CVSS 6.6, fixed in 2.11.0",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5vr-8v7q-w6rv",
       "finding": "baseline-browser-mapping:GHSA-w5vr-8v7q-w6rv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "react-router 6.30.4 — GHSA-337j-9hxr-rhxg",
       "detail": "transitive, CVSS 6.1, fixed in 7.18.0",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-337j-9hxr-rhxg",
       "finding": "react-router:GHSA-337j-9hxr-rhxg",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "postcss-selector-parser 6.1.4 — GHSA-rj75-hqrm-r3gf",
       "detail": "transitive, CVSS 5.9, fixed in 7.1.6",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rj75-hqrm-r3gf",
       "finding": "postcss-selector-parser:GHSA-rj75-hqrm-r3gf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "esbuild 0.21.5 — GHSA-67mh-4wv8-2f99",
       "detail": "transitive, CVSS 5.3, fixed in 0.25.0",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-67mh-4wv8-2f99",
       "finding": "esbuild:GHSA-67mh-4wv8-2f99",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pydantic-settings 2.14.1 — GHSA-4xgf-cpjx-pc3j",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4xgf-cpjx-pc3j",
       "finding": "pydantic-settings:GHSA-4xgf-cpjx-pc3j",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4142",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4142",
       "finding": "pyjwt:PYSEC-2026-4142",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "starlette 1.2.1 — PYSEC-2026-248",
       "detail": "transitive, CVSS 5.3, fixed in 1.3.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-248",
       "finding": "starlette:PYSEC-2026-248",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "react-router 6.30.4 — GHSA-wrjc-x8rr-h8h6",
       "detail": "transitive, CVSS 5.1, fixed in 7.18.0",
       "path": "webapp/frontend/package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wrjc-x8rr-h8h6",
       "finding": "react-router:GHSA-wrjc-x8rr-h8h6",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.savhascelik/meta-api-mcp-server",
   "version": "1.0.1",
   "slug": "io-github-savhascelik-meta-api-mcp-server",
   "scanned_at": "2026-10-16T02:48:11+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/savhascelik/meta-api-mcp-server",
   "package": "npm:meta-api-mcp-server@1.0.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 88,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "server.js",
       "line": 143,
       "excerpt": "            if (isUrl) {\n                // Uzak URL'den yükle\n                const response = await axios.get(configSource, { timeout: CONFIG_TIMEOUT });\n                if (response.status !== 200) {\n                    throw new Error(`Failed to fetch config list from URL ${configSource}. Status: ${response.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "server.js",
       "line": 180,
       "excerpt": "                    // URL ise, direkt yükle\n                    if (subIsUrl) {\n                        const response = await axios.get(subConfigSource, { timeout: CONFIG_TIMEOUT });\n                        if (response.status === 200) {\n                            const data = response.data;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "server.js",
       "line": 220,
       "excerpt": "            // --- Uzak URL'den Yükleme ---\n            console.error(`Source is a URL. Fetching...`);\n            const response = await axios.get(configSource, { timeout: CONFIG_TIMEOUT });\n            if (response.status === 200) {\n                const data = response.data;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "server.js",
       "line": 382,
       "excerpt": "        // Axios Çağrısı\n        console.error(`-> Calling HTTP Target: ${endpointConfig.targetMethod} ${targetUrl}`);\n        const apiResponse = await axios({\n            method: endpointConfig.targetMethod.toUpperCase(),\n            url: targetUrl,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:79",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 10,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 402 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (0 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.seankim-android/humanaway-mcp-server",
   "version": "0.2.2",
   "slug": "io-github-seankim-android-humanaway-mcp-server",
   "scanned_at": "2026-10-16T02:48:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/seankim-android/humanaway-mcp-server",
   "package": "npm:@humanaway/mcp-server@0.2.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "483d1a51261cdb02ab7d6880a635c1af463689b6",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 51,
       "excerpt": "  if (auth) headers[\"x-api-key\"] = getApiKey();\n\n  const res = await fetch(url.toString(), {\n    method,\n    headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:56",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 210 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 49,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "capabilities are described only in vague terms — `03` §7's 30 band, which needs no inference to establish",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.segentic-lab/glovebox-mcp",
   "version": "0.2.0",
   "slug": "io-github-segentic-lab-glovebox-mcp",
   "scanned_at": "2026-10-16T02:48:17+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/segentic-lab/glovebox-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "unknown",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "eeac5db8dab49968cccc0087256e320659c48360",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "server.py",
       "line": 170,
       "excerpt": "    \"\"\"Attach a file to a page's <input type=file> over CDP (no native dialog, no renderer hang).\"\"\"\n    import urllib.request, websocket\n    info = json.loads(urllib.request.urlopen(f\"http://127.0.0.1:{port}/json\", timeout=5).read().decode())\n    pages = [t for t in info if t.get(\"type\") == \"page\" and t.get(\"webSocketDebuggerUrl\")\n             and not t.get(\"url\", \"\").startswith(\"devtools://\")]",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.2",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "the registry entry declares no transport for any package or remote",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "19 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 101 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source: requirements.txt does not pin every requirement to one exact version, so dependency versions are unresolved and no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 72,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.shashwatgtm/revenue-enablement-mcp",
   "version": "1.0.0",
   "slug": "io-github-shashwatgtm-revenue-enablement-mcp",
   "scanned_at": "2026-10-16T02:48:20+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/shashwatgtm/revenue-enablement-mcp",
   "package": "npm:@shashwatgtmalpha/revenue-enablement-mcp@1.0.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 93,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 14 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 8,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "no README in the fetched source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.shibley/mymcptools",
   "version": "0.1.1",
   "slug": "io-github-shibley-mymcptools",
   "scanned_at": "2026-10-16T02:48:22+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/shibley/mymcptools-mcp-server",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "86b96b92c106f948327c1952f213a11f2fd4e5b8",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 28,
       "excerpt": "\nasync function callUpstream(name: string, args: Record<string, unknown>): Promise<string> {\n  const response = await fetch(getEndpoint(), {\n    method: \"POST\",\n    headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mymcptools.com/api/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "8 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 78 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 44,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.30.0 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-5jgf-p345-68v8",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5jgf-p345-68v8",
       "finding": "fast-uri:GHSA-5jgf-p345-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-fph4-wmhf-6fwf",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fph4-wmhf-6fwf",
       "finding": "fast-uri:GHSA-fph4-wmhf-6fwf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.3.1 — GHSA-2vr4-cq9g-pvrc",
       "detail": "transitive, CVSS 6.9, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2vr4-cq9g-pvrc",
       "finding": "ip-address:GHSA-2vr4-cq9g-pvrc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-gqvv-2mrq-wpjv",
       "detail": "transitive, CVSS 6.5, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-gqvv-2mrq-wpjv",
       "finding": "hono:GHSA-gqvv-2mrq-wpjv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.3.1 — GHSA-h3mg-xc3c-68pw",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h3mg-xc3c-68pw",
       "finding": "ip-address:GHSA-h3mg-xc3c-68pw",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.3.1 — GHSA-j6r3-76f7-8jcv",
       "detail": "transitive, CVSS 6.3, fixed in 10.7.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j6r3-76f7-8jcv",
       "finding": "ip-address:GHSA-j6r3-76f7-8jcv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.3.1 — GHSA-rpw4-54j3-4h4q",
       "detail": "transitive, CVSS 6.3, fixed in 10.5.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpw4-54j3-4h4q",
       "finding": "ip-address:GHSA-rpw4-54j3-4h4q",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.15.3 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-crvj-82cr-hjcx",
       "detail": "transitive, CVSS 5.9, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-crvj-82cr-hjcx",
       "finding": "hono:GHSA-crvj-82cr-hjcx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-54fx-42gc-7vw4",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-54fx-42gc-7vw4",
       "finding": "hono:GHSA-54fx-42gc-7vw4",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-8j4g-w8fx-2239",
       "detail": "transitive, CVSS 5.3, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j4g-w8fx-2239",
       "finding": "hono:GHSA-8j4g-w8fx-2239",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-g6gw-c38x-mqfc",
       "detail": "transitive, CVSS 5.3, fixed in 4.13.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-g6gw-c38x-mqfc",
       "finding": "hono:GHSA-g6gw-c38x-mqfc",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.4 — GHSA-hrr3-gc8f-f4qj",
       "detail": "transitive, CVSS 4.8, fixed in 3.1.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hrr3-gc8f-f4qj",
       "finding": "fast-uri:GHSA-hrr3-gc8f-f4qj",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-f23p-vx2j-j53r",
       "detail": "transitive, CVSS 4.8, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f23p-vx2j-j53r",
       "finding": "hono:GHSA-f23p-vx2j-j53r",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-hxh3-vqpv-xpqv",
       "detail": "transitive, CVSS 4.7, fixed in 4.13.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hxh3-vqpv-xpqv",
       "finding": "hono:GHSA-hxh3-vqpv-xpqv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.12.32 — GHSA-79qm-7rj5-m7r9",
       "detail": "transitive, CVSS 3.7, fixed in 4.12.34",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-79qm-7rj5-m7r9",
       "finding": "hono:GHSA-79qm-7rj5-m7r9",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.shigechika/gws-mcp",
   "version": "0.22.5-mcp.38",
   "slug": "io-github-shigechika-gws-mcp",
   "scanned_at": "2026-10-16T02:48:26+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/shigechika/gws-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "dbf35922f6e356c7fa8a8f15c5d411554470ff88",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "npm/install.js",
       "line": 40,
       "excerpt": " */\nasync function download(url, dest) {\n  const res = await fetch(url, { redirect: \"follow\" });\n\n  if (!res.ok) {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 76,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Private Key at crates/google-workspace-cli/src/auth.rs:680; …and 70 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 15 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (5 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 15 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 85,
     "reason": "10 vulnerabilities could not be placed in `03` §6's table and are listed but not scored",
     "assessed_weight": "0.09",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "shell-quote 1.10.0 — GHSA-pqg4-j6r4-53mv",
       "detail": "transitive, CVSS 9.2, fixed in 1.11.0",
       "path": "pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pqg4-j6r4-53mv",
       "finding": "shell-quote:GHSA-pqg4-j6r4-53mv",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "quinn-proto 0.11.16 — RUSTSEC-2026-0340",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.18",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0340",
       "finding": "quinn-proto:RUSTSEC-2026-0340",
       "severity": "high",
       "first_seen": "2026-10-13",
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.16 — RUSTSEC-2026-0341",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 7.5, fixed in 0.11.17",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0341",
       "finding": "quinn-proto:RUSTSEC-2026-0341",
       "severity": "high",
       "first_seen": "2026-10-13",
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0346",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 4.0, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0346",
       "finding": "rustls:RUSTSEC-2026-0346",
       "severity": "medium",
       "first_seen": "2026-10-15",
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0348",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0348",
       "finding": "rustls:RUSTSEC-2026-0348",
       "severity": "low",
       "first_seen": "2026-10-15",
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0349",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 3.7, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0349",
       "finding": "rustls:RUSTSEC-2026-0349",
       "severity": "low",
       "first_seen": "2026-10-15",
       "deducts": false
      },
      {
       "label": "rustls 0.23.45 — RUSTSEC-2026-0347",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, CVSS 2.3, fixed in 0.23.46",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0347",
       "finding": "rustls:RUSTSEC-2026-0347",
       "severity": "low",
       "first_seen": "2026-10-15",
       "deducts": false
      },
      {
       "label": "lru 0.16.4 — RUSTSEC-2026-0253",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.18.2",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0253",
       "finding": "lru:RUSTSEC-2026-0253",
       "severity": "",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.16 — RUSTSEC-2026-0338",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.11.18",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0338",
       "finding": "quinn-proto:RUSTSEC-2026-0338",
       "severity": "",
       "first_seen": "2026-10-13",
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.16 — RUSTSEC-2026-0339",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.11.17",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0339",
       "finding": "quinn-proto:RUSTSEC-2026-0339",
       "severity": "",
       "first_seen": "2026-10-13",
       "deducts": false
      },
      {
       "label": "quinn-proto 0.11.16 — RUSTSEC-2026-0342",
       "detail": "direct or transitive unknown — no parseable manifest for this ecosystem, no CVSS published, fixed in 0.11.17",
       "path": "Cargo.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/RUSTSEC-2026-0342",
       "finding": "quinn-proto:RUSTSEC-2026-0342",
       "severity": "",
       "first_seen": "2026-10-13",
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 68,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.shulex-voc/smart-crawler",
   "version": "0.2.1",
   "slug": "io-github-shulex-voc-smart-crawler",
   "scanned_at": "2026-10-16T02:48:32+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/shulex-voc/smart-crawler",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "8e4c67588521e80ff3f5ee6f21442d5b18cd0436",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://smartcrawler.io/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "8 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 50,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 130 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (1 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 13,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.skyhook-io/radar",
   "version": "1.17.0",
   "slug": "io-github-skyhook-io-radar",
   "scanned_at": "2026-10-16T02:48:34+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/skyhook-io/radar",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "7505b3f51f31bd8ac8fff4d9845ce6e1a8370d10",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2423,
   "files_pruned": 2,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 0,
     "reason": "6 findings in test code are listed but not deducted; 2 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 5 files could not be parsed and were not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 56,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-go-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly.",
       "path": "internal/helm/oci_sources.go",
       "line": 64,
       "excerpt": "\n// rejectLinkLocalHost blocks the highest-value SSRF target — the cloud metadata\n// endpoint (169.254.169.254) and link-local range — when the host is a literal\n// IP. Loopback / private ranges are deliberately allowed so local dev registries\n// (localhost:5000) still work; broader private-range/DNS-resolution blocking is",
       "url": "",
       "finding": "mcp-go-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly.",
       "path": "internal/trace/probes.go",
       "line": 569,
       "excerpt": "\tr.Port = p.Port\n\t// The dial-time SSRF guard refused an internal/metadata target (an ExternalName\n\t// can alias 169.254.169.254 or a loopback address). Its raw \"(SSRF guard)\"\n\t// string must never surface as a red \"unreachable\" verdict at ANY vantage -\n\t// demote to an honest skip naming the blocked target (mirrors probeGateway).",
       "url": "",
       "finding": "mcp-go-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly.",
       "path": "internal/trace/probes.go",
       "line": 1372,
       "excerpt": "\t\t\t}\n\t\t\t// The dial-time SSRF guard refused an internal/metadata target (a host\n\t\t\t// resolving to 169.254.169.254, loopback, or an internal address). Its raw\n\t\t\t// \"(SSRF guard)\" string must never read as a red \"unreachable\" verdict at\n\t\t\t// ANY vantage - demote to an honest skip naming the blocked target",
       "url": "",
       "finding": "mcp-go-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly.",
       "path": "pkg/probe/probe.go",
       "line": 56,
       "excerpt": "// denyInternalControl is a net.Dialer.Control hook that refuses DIRECT probe\n// connections to loopback, unspecified (0.0.0.0/::), and link-local addresses - most importantly the\n// cloud metadata endpoint 169.254.169.254. A user who can set an Ingress host\n// or Gateway address could otherwise point it at an internal target and have\n// Radar's probe reach it on their behalf (SSRF). Legitimate probe targets are",
       "url": "",
       "finding": "mcp-go-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "web/src/components/traffic/TrafficView.tsx",
       "line": 308,
       "excerpt": "    return true\n  }\n  if (name === 'metadata.google.internal' || name === 'metadata.google.internal.') {\n    return true\n  }",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "web/src/components/traffic/TrafficView.tsx",
       "line": 308,
       "excerpt": "    return true\n  }\n  if (name === 'metadata.google.internal' || name === 'metadata.google.internal.') {\n    return true\n  }",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "web/src/components/traffic/TrafficView.tsx",
       "line": 634,
       "excerpt": "      const isAlwaysFiltered = (name: string) =>\n        // Cloud metadata services\n        name === 'metadata.google.internal' ||\n        name === 'metadata.google.internal.' ||\n        name.startsWith('169.254.') ||",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "web/src/components/traffic/TrafficView.tsx",
       "line": 635,
       "excerpt": "        // Cloud metadata services\n        name === 'metadata.google.internal' ||\n        name === 'metadata.google.internal.' ||\n        name.startsWith('169.254.') ||\n        name === 'instance-data.ec2.internal' ||",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "web/src/components/traffic/TrafficView.tsx",
       "line": 710,
       "excerpt": "\n    const isAlwaysFiltered = (name: string) =>\n      name === 'metadata.google.internal' || name === 'metadata.google.internal.' ||\n      name.startsWith('169.254.') || name === 'instance-data.ec2.internal' ||\n      name === 'localhost' || name === '127.0.0.1' || name.startsWith('127.') || name === '0.0.0.0'",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "web/src/components/traffic/TrafficView.tsx",
       "line": 710,
       "excerpt": "\n    const isAlwaysFiltered = (name: string) =>\n      name === 'metadata.google.internal' || name === 'metadata.google.internal.' ||\n      name.startsWith('169.254.') || name === 'instance-data.ec2.internal' ||\n      name === 'localhost' || name === '127.0.0.1' || name.startsWith('127.') || name === '0.0.0.0'",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/components/resources/printer-columns.ts",
       "line": 88,
       "excerpt": "    // Realign to the surviving columns, or a dropped duplicate would shift\n    // every later value into the wrong column.\n    cells[uid] = keptIdx.map(i => row[i])\n  }\n  return {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/components/resources/renderers/GenericRenderer.tsx",
       "line": 180,
       "excerpt": "  for (const field of priorityFields) {\n    if (obj[field] !== undefined && !isComplexObject(obj[field])) {\n      result[field] = obj[field]\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/filter-state/filter-state-core.ts",
       "line": 63,
       "excerpt": "    const raw = params.get(def.param)\n    if (def.type === 'set') {\n      ;(out[key] as Set<string>) = new Set((raw ?? '').split(',').filter(Boolean))\n    } else if (def.type === 'boolean') {\n      ;(out[key] as boolean) = raw === '1'",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/filter-state/filter-state-core.ts",
       "line": 65,
       "excerpt": "      ;(out[key] as Set<string>) = new Set((raw ?? '').split(',').filter(Boolean))\n    } else if (def.type === 'boolean') {\n      ;(out[key] as boolean) = raw === '1'\n    } else {\n      // text / single: an empty param (?f=) reads as the default, same as omission.",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/filter-state/filter-state-core.ts",
       "line": 68,
       "excerpt": "    } else {\n      // text / single: an empty param (?f=) reads as the default, same as omission.\n      ;(out[key] as string) = raw ? raw : (def.default ?? '')\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/utils/extended-resources.ts",
       "line": 45,
       "excerpt": "  for (const key of keys) {\n    const value = getEffectiveResourceValue(resources, key)\n    if (value !== undefined) out[key] = value\n  }\n  return out",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/utils/yaml.ts",
       "line": 81,
       "excerpt": "                Array.isArray(cleaned[field])\n              ) {\n                cleaned[field] = safeSecretReviewMarker(cleaned[field])\n                continue\n              }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/utils/yaml.ts",
       "line": 85,
       "excerpt": "              }\n              for (const key of Object.keys(cleaned[field])) {\n                cleaned[field][key] = safeSecretReviewMarker(cleaned[field][key])\n              }\n            }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/k8s-ui/src/utils/yaml.ts",
       "line": 91,
       "excerpt": "            if (annotations && typeof annotations === 'object' && !Array.isArray(annotations)) {\n              for (const key of Object.keys(annotations)) {\n                annotations[key] = safeSecretReviewMarker(annotations[key])\n              }\n            } else if (annotations !== undefined) {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "web/src/components/cnpg/operations/model.ts",
       "line": 88,
       "excerpt": "    const f = obs.freshness?.[source]\n    const differentCluster = op.clusterUID && source !== 'clusterUID' && source !== 'backups' && f?.clusterUID !== op.clusterUID\n    if (!f || f.failed || f.updatedAt < op.startedAt || differentCluster) out[source] = undefined\n  }\n  return out",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "web/src/components/cnpg/storageModel.ts",
       "line": 8,
       "excerpt": "  let cur = obj\n  for (const p of path.slice(0, -1)) {\n    cur[p] = cur[p] && typeof cur[p] === 'object' ? { ...cur[p] } : {}\n    cur = cur[p]\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "web/src/components/helm/InstallWizard.tsx",
       "line": 25,
       "excerpt": "    const overVal = overrides[key]\n    if (baseVal && overVal && typeof baseVal === 'object' && typeof overVal === 'object' && !Array.isArray(baseVal) && !Array.isArray(overVal)) {\n      result[key] = deepMerge(baseVal as Record<string, unknown>, overVal as Record<string, unknown>)\n    } else {\n      result[key] = overVal",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "web/src/components/helm/InstallWizard.tsx",
       "line": 27,
       "excerpt": "      result[key] = deepMerge(baseVal as Record<string, unknown>, overVal as Record<string, unknown>)\n    } else {\n      result[key] = overVal\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/auth/oidc.go",
       "line": 314,
       "excerpt": "func fetchOIDCProviderMetadata(ctx context.Context, issuer string) (*oidcProviderMetadata, error) {\n\twellKnown := strings.TrimSuffix(issuer, \"/\") + \"/.well-known/openid-configuration\"\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, wellKnown, nil)\n\tif err != nil {\n\t\treturn nil, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/cloud/agent_status.go",
       "line": 57,
       "excerpt": "\t\treturn nil, err\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, c.HubBase+\"/api/agent/status\", nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"build agent status request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/cloud/agent_status.go",
       "line": 100,
       "excerpt": "\t\treturn \"\", err\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, c.HubBase+\"/api/config\", nil)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"build Hub config request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/cloud/connect.go",
       "line": 163,
       "excerpt": "\t\treturn nil, err\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodPost, c.HubBase+\"/api/connect/requests\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn nil, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/cloud/connect.go",
       "line": 201,
       "excerpt": "\t\treturn nil, err\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, c.HubBase+\"/api/connect/requests/\"+requestID, nil)\n\tif err != nil {\n\t\treturn nil, err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/diagnosecli/diagnosecli.go",
       "line": 362,
       "excerpt": "func recordConsentHTTP(base, surface string) error {\n\tbody, _ := json.Marshal(map[string]string{\"surface\": surface})\n\tresp, err := http.Post(base+\"/api/diagnose/consent\", \"application/json\", strings.NewReader(string(body)))\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/diagnosecli/diagnosecli.go",
       "line": 528,
       "excerpt": "\t\t\"kind\": kind, \"group\": group, \"namespace\": namespace, \"name\": name, \"agent\": agent, \"profile\": profile,\n\t})\n\tresp, err := http.Post(base+\"/api/diagnose/runs\", \"application/json\", strings.NewReader(string(body)))\n\tif err != nil {\n\t\treturn runSummary{}, fmt.Errorf(\"couldn't start the investigation: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/diagnosecli/diagnosecli.go",
       "line": 575,
       "excerpt": "// Returns the raw conclusion JSON (for --json) and whether the turn succeeded.\nfunc streamRun(base, id string, out *renderer) (json.RawMessage, bool) {\n\tresp, err := http.Get(base + \"/api/diagnose/runs/\" + id + \"/stream\")\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"stream failed: %v\\n\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/diagnosecli/standalone.go",
       "line": 90,
       "excerpt": "\tdeadline := time.Now().Add(2 * time.Minute)\n\tfor {\n\t\tresp, err := http.Get(base + \"/api/diagnose/runs\")\n\t\tif err == nil {\n\t\t\tcode := resp.StatusCode",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/helm/prepared_install.go",
       "line": 436,
       "excerpt": "\nfunc fetchPreparedBytes(ctx context.Context, target string, maxBytes int64, kind string) ([]byte, error) {\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, target, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"fetch %s: %w\", kind, err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/k8s/runtime_auth.go",
       "line": 404,
       "excerpt": "\t\treturn http.ErrUseLastResponse\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, probeConfig.Host+\"/version\", nil)\n\tif err != nil {\n\t\treturn err",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and opened without confinement. filepath.Join cleans `..` but does not confine: a component of \"../../etc/passwd\" still resolves outside the base.",
       "path": "internal/memlimit/cgroup.go",
       "line": 76,
       "excerpt": "\t}\n\tfor dir := start; ; dir = filepath.Dir(dir) {\n\t\tif b, err := os.ReadFile(filepath.Join(dir, file)); err == nil {\n\t\t\tif v, ok := parse(strings.TrimSpace(string(b))); ok && v < limit {\n\t\t\t\tlimit = v",
       "url": "",
       "finding": "mcp-go-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/server/curl.go",
       "line": 227,
       "excerpt": "\tdefer cancel()\n\n\tpreq, err := http.NewRequestWithContext(ctx, http.MethodGet, target, nil)\n\tif err != nil {\n\t\ts.writeError(w, http.StatusBadRequest, \"invalid target\")",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/server/velero_results.go",
       "line": 322,
       "excerpt": "\t}\n\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, rawURL, nil)\n\tif err != nil {\n\t\t// url.Parse above rejects the same inputs, so nothing is known to reach",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/traffic/caretta.go",
       "line": 665,
       "excerpt": "\tdefer cancel()\n\n\treq, err := http.NewRequestWithContext(queryCtx, \"GET\", fmt.Sprintf(\"%s/api/v1/query?query=%s\", addr, url.QueryEscape(query)), nil)\n\tif err != nil {\n\t\treturn false",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/traffic/caretta.go",
       "line": 791,
       "excerpt": "\tqueryURL := fmt.Sprintf(\"%s%s/api/v1/query?query=%s\", promAddr, basePath, url.QueryEscape(query))\n\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", queryURL, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/traffic/caretta.go",
       "line": 1431,
       "excerpt": "\tdefer cancel()\n\n\treq, err := http.NewRequestWithContext(testCtx, \"GET\", addr+\"/api/v1/query?query=up\", nil)\n\tif err != nil {\n\t\treturn false",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/traffic/caretta.go",
       "line": 1484,
       "excerpt": "\tqueryURL := fmt.Sprintf(\"%s%s/api/v1/query?query=%s\", promAddr, basePath, url.QueryEscape(query))\n\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", queryURL, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/version/download.go",
       "line": 95,
       "excerpt": "\n\tclient := &http.Client{Timeout: 30 * time.Minute}\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", url, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/version/download.go",
       "line": 172,
       "excerpt": "\t// Download checksums\n\tclient := &http.Client{Timeout: 30 * time.Second}\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", checksumURL, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create checksum request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/version/version.go",
       "line": 154,
       "excerpt": "\trequestCtx, cancel := context.WithTimeout(ctx, 10*time.Second)\n\tdefer cancel()\n\treq, err := http.NewRequestWithContext(requestCtx, http.MethodGet, fmt.Sprintf(\"%s?%s\", releasesURL, params.Encode()), nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"create relayed update check: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/version/version.go",
       "line": 246,
       "excerpt": "\tproxyURL := fmt.Sprintf(\"%s?%s\", releasesURL, params.Encode())\n\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", proxyURL, nil)\n\tif err != nil {\n\t\tresult.Error = fmt.Sprintf(\"failed to create request: %v\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "internal/version/version.go",
       "line": 261,
       "excerpt": "\t\t}\n\t\tlog.Printf(\"[version] Proxy failed, falling back to GitHub directly\")\n\t\treq2, err2 := http.NewRequestWithContext(ctx, \"GET\", githubURL, nil)\n\t\tif err2 != nil {\n\t\t\tresult.Error = fmt.Sprintf(\"failed to create fallback request: %v\", err2)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "pkg/argoapi/client.go",
       "line": 270,
       "excerpt": "\t}\n\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, full, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"argoapi: build request for %s: %w\", path, err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "pkg/probe/probe.go",
       "line": 467,
       "excerpt": "\t\treturn r\n\t}\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)\n\tif err != nil {\n\t\tr.Error = sanitizeError(err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "pkg/prom/transport.go",
       "line": 83,
       "excerpt": "\t}\n\n\treq, err := http.NewRequestWithContext(ctx, method, full, requestBody)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"prom.HTTPTransport: build request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/workload-metrics-demo/capture.mjs",
       "line": 13,
       "excerpt": "const result = {checkedAt: new Date().toISOString(), workloads: []};\nasync function get(path) {\n  const response = await fetch(base.href.replace(/\\/$/, '') + path, {headers, signal: AbortSignal.timeout(40000), redirect: 'error'});\n  if (!response.ok) throw Error(`Radar request failed: HTTP ${response.status}`);\n  const reader = response.body.getReader();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 67,
     "reason": "",
     "assessed_weight": "0.6",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "auth enforcement present at a call site in the source (auth middleware) and documented in the README; \"refused without credentials\" (`03` §4) established by reading the code rather than by connecting",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "transport is streamable-http but the entry declares no endpoint URL to read a scheme from",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "GitHub Token at internal/helm/manifest_redaction_test.go:49; AWS Access Key at pkg/ai/context/redact_auth_test.go:25; AWS Access Key at pkg/ai/context/redact_auth_test.go:26; GitHub Token at pkg/ai/context/redact_test.go:20; AWS Access Key at pkg/ai/context/redact_test.go:28; GitHub Token at pkg/ai/context/redact_test.go:160; Private Key at web/src/components/diagnose/InvestigationResourceEvidence.test.tsx:26; …and 396 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 81,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 50 issue(s) in the last 6 months: 31.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 9 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 97,
     "reason": "1 vulnerability could not be placed in `03` §6's table and is listed but not scored",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "postcss-selector-parser 6.0.10 — GHSA-rj75-hqrm-r3gf",
       "detail": "transitive, CVSS 5.9, fixed in 7.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rj75-hqrm-r3gf",
       "finding": "postcss-selector-parser:GHSA-rj75-hqrm-r3gf",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "golang.org/x/crypto 0.57.0 — GO-2026-5932",
       "detail": "transitive, no CVSS published",
       "path": "go.mod",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GO-2026-5932",
       "finding": "golang.org/x/crypto:GO-2026-5932",
       "severity": "",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 66,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.smeet666/mcp-databnf",
   "version": "2.1.2",
   "slug": "io-github-smeet666-mcp-databnf",
   "scanned_at": "2026-10-16T02:49:22+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/smeet666/mcp-databnf",
   "package": "npm:mcp-databnf@2.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "9c11de5a5a29a150f8239c2cf6cefd86881f2186",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 27,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 2.1.2, because the published package carries its code only as build output, which is not read as the server's own source; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 95,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (3 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 2 days (by releases), last release 48 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.software-mansion/argent",
   "version": "0.19.0",
   "slug": "io-github-software-mansion-argent",
   "scanned_at": "2026-10-16T02:49:26+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/software-mansion/argent",
   "package": "npm:@swmansion/argent@0.19.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 86,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "assets/trace-processor/engine_bundle.node.js",
       "line": 1786,
       "excerpt": "\t\t      for (const key of [ \"mode\", \"atime\", \"mtime\", \"ctime\" ]) {\n\t\t        if (attr[key] != null) {\n\t\t          node[key] = attr[key];\n\t\t        }\n\t\t      }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "assets/trace-processor/engine_bundle.node.js",
       "line": 2127,
       "excerpt": "\t\t      for (const key of [ \"mode\", \"atime\", \"mtime\", \"ctime\" ]) {\n\t\t        if (attr[key] != null) {\n\t\t          node[key] = attr[key];\n\t\t        }\n\t\t      }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "assets/trace-processor/engine_bundle.node.js",
       "line": 4907,
       "excerpt": "\t\t      // explicitly set to be so. We allow user code to do that to\n\t\t      // force variables with default values to remain unset.\n\t\t      if (ENV[x] === undefined) delete env[x]; else env[x] = ENV[x];\n\t\t    }\n\t\t    var strings = [];",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "assets/trace-processor/engine_bundle.node.js",
       "line": 6972,
       "excerpt": "\t\t      for (const key of [ \"mode\", \"atime\", \"mtime\", \"ctime\" ]) {\n\t\t        if (attr[key] != null) {\n\t\t          node[key] = attr[key];\n\t\t        }\n\t\t      }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "assets/trace-processor/engine_bundle.node.js",
       "line": 7313,
       "excerpt": "\t\t      for (const key of [ \"mode\", \"atime\", \"mtime\", \"ctime\" ]) {\n\t\t        if (attr[key] != null) {\n\t\t          node[key] = attr[key];\n\t\t        }\n\t\t      }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "assets/trace-processor/engine_bundle.node.js",
       "line": 10089,
       "excerpt": "\t\t      // explicitly set to be so. We allow user code to do that to\n\t\t      // force variables with default values to remain unset.\n\t\t      if (ENV[x] === undefined) delete env[x]; else env[x] = ENV[x];\n\t\t    }\n\t\t    var strings = [];",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/trace-processor/engine_bundle.node.js",
       "line": 663,
       "excerpt": "\t\t    readAsync = async url => {\n\t\t      assert(!isFileURI(url), \"readAsync does not work with file:// URLs\");\n\t\t      var response = await fetch(url, {\n\t\t        credentials: \"same-origin\"\n\t\t      });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "assets/trace-processor/engine_bundle.node.js",
       "line": 5847,
       "excerpt": "\t\t    readAsync = async url => {\n\t\t      assert(!isFileURI(url), \"readAsync does not work with file:// URLs\");\n\t\t      var response = await fetch(url, {\n\t\t        credentials: \"same-origin\"\n\t\t      });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 17 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at dist/cli-cmds.mjs:1427; Secret Keyword at dist/cli-cmds.mjs:2062; Secret Keyword at dist/cli-cmds.mjs:2063; Secret Keyword at dist/cli-cmds.mjs:4529; Base64 High Entropy String at dist/cli-cmds.mjs:7526; Secret Keyword at dist/installer.mjs:13294; Base64 High Entropy String at dist/installer.mjs:16291; Secret Keyword at dist/installer.mjs:16576; Base64 High Entropy String at dist/mcp-server.mjs:14109; Secret Keyword at dist/mcp-server.mjs:16633; …and 7 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "only 0 issue(s) from outside the project fall inside `03` §5's 6-month window, which is under §5's floor of 3, and §5's lifetime-median fallback needs this repository's whole issue history — more of it than `04` §7's bounded fetch reads. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 2 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.srotzin/hive-mcp-trade",
   "version": "1.1.0",
   "slug": "io-github-srotzin-hive-mcp-trade",
   "scanned_at": "2026-10-16T02:49:53+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/srotzin/hive-mcp-trade",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "5937e422a7f9db604fd8a0904ae2d11007547081",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "hive-earn-tools.js",
       "line": 35,
       "excerpt": "    };\n    if (body !== undefined && method !== 'GET') init.body = JSON.stringify(body);\n    const res = await fetch(url, init);\n\n    // 402 — propagate the x402 payment-required body untouched so the",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "server.js",
       "line": 127,
       "excerpt": "  const url = new URL(`${HIVE_BASE}${path.startsWith('/') ? path : '/' + path}`);\n  Object.entries(params).forEach(([k, v]) => v != null && url.searchParams.set(k, v));\n  const res = await fetch(url.toString(), { signal: AbortSignal.timeout(15000) });\n  return res.json();\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 85,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential enforcement present in source but not documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://hive-mcp-gateway.onrender.com/trade/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it. A tool-list handler IS present, so the tools are built in a shape this counter could not enumerate.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 78 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 172 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.srotzin/hivebank",
   "version": "1.0.0",
   "slug": "io-github-srotzin-hivebank",
   "scanned_at": "2026-10-16T02:49:56+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/srotzin/hivebank",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "8af43d8a5d7b362488fd5fef0810b41403ac3528",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 56,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 86,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/routes/echo.js",
       "line": 158,
       "excerpt": "  const allPartyStates = {};\n  for (const did of parties) {\n    allPartyStates[did] = {};\n    for (const [key, entry] of currentStates.entries()) {\n      if (entry.state && entry.state.did === did) allPartyStates[did][key] = { state: entry.state, state_hash: entry.state_hash, recorded_at: entry.recorded_at };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/middleware/mpp.js",
       "line": 87,
       "excerpt": "\n  try {\n    const rpcRes = await fetch(BASE_RPC_URL, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/middleware/x402.js",
       "line": 104,
       "excerpt": "  const usdcLower = USDC_CONTRACT.toLowerCase();\n  try {\n    const receiptRes = await fetch(BASE_RPC_URL, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/routes/settlement.js",
       "line": 21,
       "excerpt": "  const KEY = require('../lib/internal-key').getInternalKey();\n  try {\n    await fetch(HIVEBANK_URL + '/v1/bank/rewards/claim', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', 'x-hive-internal': KEY },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/server.js",
       "line": 816,
       "excerpt": "      const ctrl = new AbortController();\n      const t = setTimeout(() => ctrl.abort(), 15000);\n      await fetch(url, { signal: ctrl.signal });\n      clearTimeout(t);\n    } catch {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/cross-service.js",
       "line": 9,
       "excerpt": "  const timeout = setTimeout(() => controller.abort(), timeoutMs);\n  try {\n    const res = await fetch(url, { ...options, signal: controller.signal });\n    return res;\n  } finally {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/services/yield-vault.js",
       "line": 148,
       "excerpt": "      const ctrl = new AbortController();\n      const timer = setTimeout(() => ctrl.abort(), 6000);\n      const resp = await fetch(url, { signal: ctrl.signal });\n      clearTimeout(timer);\n      if (!resp.ok) throw new Error(`HTTP ${resp.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 61,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential enforcement present in source but not documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://hivebank.onrender.com/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "Private Key at src/services/mpc-treasury.js:151; …and 7 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 73,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 166 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "uuid 10.0.0 — GHSA-w5hq-g745-h8pq",
       "detail": "direct, CVSS 7.5, fixed in 11.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5hq-g745-h8pq",
       "finding": "uuid:GHSA-w5hq-g745-h8pq",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-35jp-ww65-95wh",
       "detail": "transitive, CVSS 8.7, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-35jp-ww65-95wh",
       "finding": "axios:GHSA-35jp-ww65-95wh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "form-data 4.0.5 — GHSA-hmw2-7cc7-3qxx",
       "detail": "transitive, CVSS 8.7, fixed in 4.0.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hmw2-7cc7-3qxx",
       "finding": "form-data:GHSA-hmw2-7cc7-3qxx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-pjwm-pj3p-43mv",
       "detail": "transitive, CVSS 8.6, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pjwm-pj3p-43mv",
       "finding": "axios:GHSA-pjwm-pj3p-43mv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-x97p-jq2g-jp4f",
       "detail": "transitive, CVSS 8.3, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x97p-jq2g-jp4f",
       "finding": "axios:GHSA-x97p-jq2g-jp4f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-542g-h47m-68v8",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-542g-h47m-68v8",
       "finding": "axios:GHSA-542g-h47m-68v8",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-mghh-pgcx-3jjj",
       "detail": "transitive, CVSS 8.2, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mghh-pgcx-3jjj",
       "finding": "axios:GHSA-mghh-pgcx-3jjj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-p92q-9vqr-4j8v",
       "detail": "transitive, CVSS 8.2, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p92q-9vqr-4j8v",
       "finding": "axios:GHSA-p92q-9vqr-4j8v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-777c-7fjr-54vf",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-777c-7fjr-54vf",
       "finding": "axios:GHSA-777c-7fjr-54vf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-hfxv-24rg-xrqf",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hfxv-24rg-xrqf",
       "finding": "axios:GHSA-hfxv-24rg-xrqf",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-j5f8-grm9-p9fc",
       "detail": "transitive, CVSS 7.5, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j5f8-grm9-p9fc",
       "finding": "axios:GHSA-j5f8-grm9-p9fc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.17.1 — GHSA-96hv-2xvq-fx4p",
       "detail": "transitive, CVSS 7.5, fixed in 8.21.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.18.3 — GHSA-96hv-2xvq-fx4p",
       "detail": "transitive, CVSS 7.5, fixed in 8.21.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-q8qp-cvcw-x6jj",
       "detail": "transitive, CVSS 7.4, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8qp-cvcw-x6jj",
       "finding": "axios:GHSA-q8qp-cvcw-x6jj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-3g43-6gmg-66jw",
       "detail": "transitive, CVSS 7.0, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3g43-6gmg-66jw",
       "finding": "axios:GHSA-3g43-6gmg-66jw",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-3pq3-5fj3-cg6v",
       "detail": "transitive, CVSS 7.0, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3pq3-5fj3-cg6v",
       "finding": "axios:GHSA-3pq3-5fj3-cg6v",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-44g4-m2mj-wpvx",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-44g4-m2mj-wpvx",
       "finding": "axios:GHSA-44g4-m2mj-wpvx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-4hqw-qxg8-jxx2",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4hqw-qxg8-jxx2",
       "finding": "axios:GHSA-4hqw-qxg8-jxx2",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-9fr6-4gfg-395g",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9fr6-4gfg-395g",
       "finding": "axios:GHSA-9fr6-4gfg-395g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-f4gw-2p7v-4548",
       "detail": "transitive, CVSS 6.9, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f4gw-2p7v-4548",
       "finding": "axios:GHSA-f4gw-2p7v-4548",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-hcpx-6fm6-wx23",
       "detail": "transitive, CVSS 6.9, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hcpx-6fm6-wx23",
       "finding": "axios:GHSA-hcpx-6fm6-wx23",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-j8rh-479h-cp32",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j8rh-479h-cp32",
       "finding": "axios:GHSA-j8rh-479h-cp32",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-vh66-26gq-q6x8",
       "detail": "transitive, CVSS 6.9, fixed in 1.20.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vh66-26gq-q6x8",
       "finding": "axios:GHSA-vh66-26gq-q6x8",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-3w6x-2g7m-8v23",
       "detail": "transitive, CVSS 6.5, fixed in 1.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3w6x-2g7m-8v23",
       "finding": "axios:GHSA-3w6x-2g7m-8v23",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-42h9-826w-cgv3",
       "detail": "transitive, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-42h9-826w-cgv3",
       "finding": "axios:GHSA-42h9-826w-cgv3",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-7q8q-rj6j-mhjq",
       "detail": "transitive, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7q8q-rj6j-mhjq",
       "finding": "axios:GHSA-7q8q-rj6j-mhjq",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-jqh4-m9w3-8hp9",
       "detail": "transitive, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqh4-m9w3-8hp9",
       "finding": "axios:GHSA-jqh4-m9w3-8hp9",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-mmx7-hfxf-jppx",
       "detail": "transitive, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mmx7-hfxf-jppx",
       "finding": "axios:GHSA-mmx7-hfxf-jppx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-mwf2-3pr3-8698",
       "detail": "transitive, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwf2-3pr3-8698",
       "finding": "axios:GHSA-mwf2-3pr3-8698",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-pmv8-rq9r-6j72",
       "detail": "transitive, CVSS 6.3, fixed in 1.18.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-pmv8-rq9r-6j72",
       "finding": "axios:GHSA-pmv8-rq9r-6j72",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.2 — GHSA-4mjr-xmp4-gh2g",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4mjr-xmp4-gh2g",
       "finding": "qs:GHSA-4mjr-xmp4-gh2g",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.2 — GHSA-q8mj-m7cp-5q26",
       "detail": "transitive, CVSS 6.3, fixed in 6.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q8mj-m7cp-5q26",
       "finding": "qs:GHSA-q8mj-m7cp-5q26",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "qs 6.14.2 — GHSA-x5fp-wj9c-mxmx",
       "detail": "transitive, CVSS 6.3, fixed in 6.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-x5fp-wj9c-mxmx",
       "finding": "qs:GHSA-x5fp-wj9c-mxmx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "elliptic 6.6.1 — GHSA-848j-6mx2-7j84",
       "detail": "transitive, CVSS 5.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-848j-6mx2-7j84",
       "finding": "elliptic:GHSA-848j-6mx2-7j84",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "axios 1.15.1 — GHSA-898c-q2cr-xwhg",
       "detail": "transitive, CVSS 4.8, fixed in 1.16.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-898c-q2cr-xwhg",
       "finding": "axios:GHSA-898c-q2cr-xwhg",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.17.1 — GHSA-58qx-3vcg-4xpx",
       "detail": "transitive, CVSS 4.4, fixed in 8.20.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-58qx-3vcg-4xpx",
       "finding": "ws:GHSA-58qx-3vcg-4xpx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.18.3 — GHSA-58qx-3vcg-4xpx",
       "detail": "transitive, CVSS 4.4, fixed in 8.20.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-58qx-3vcg-4xpx",
       "finding": "ws:GHSA-58qx-3vcg-4xpx",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "body-parser 1.20.4 — GHSA-v422-hmwv-36x6",
       "detail": "transitive, CVSS 3.7, fixed in 1.20.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v422-hmwv-36x6",
       "finding": "body-parser:GHSA-v422-hmwv-36x6",
       "severity": "low",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.sudomock/mcp",
   "version": "3.6.0",
   "slug": "io-github-sudomock-mcp",
   "scanned_at": "2026-10-16T02:50:00+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/sudomock/mcp-server",
   "package": "npm:@sudomock/mcp@3.6.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "0fbde2bb1bef221f894c9343463bd23f9304a103",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 89,
     "reason": "scored on the declared repository at version 3.6.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/index.ts",
       "line": 862,
       "excerpt": "      return original.apply(target, args);\n    };\n    (target as unknown as Record<string, unknown>)[method] = wrapped;\n  }\n}",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 141,
       "excerpt": "    let resp: Response;\n    try {\n      resp = await fetch(url, {\n        method,\n        headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/index.ts",
       "line": 2645,
       "excerpt": "    // the tool result: it is a bearer capability, and a tool result is a logged,\n    // retained channel.\n    const put = await fetch(uploadUrl, {\n      method: \"PUT\",\n      headers: { \"Content-Type\": \"application/octet-stream\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:30; Base64 High Entropy String at dist/index.js:37",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 10 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 10 day(s) ago (by tags), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.telsav/flutter-skill",
   "version": "0.7.6",
   "slug": "io-github-telsav-flutter-skill",
   "scanned_at": "2026-10-16T02:50:04+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ai-dashboad/flutter-skill",
   "package": "npm:flutter-skill@0.7.6",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 42,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "bin/cli.js",
       "line": 155,
       "excerpt": "  try {\n    const pubCmd = checkFlutter() ? 'flutter' : 'dart';\n    execSync(`${pubCmd} pub get`, {\n      cwd: dartDir,\n      stdio: ['ignore', 'pipe', 'pipe']",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "scripts/check-dart.js",
       "line": 7,
       "excerpt": "function checkCommand(cmd) {\n  try {\n    execSync(`${cmd} --version`, { stdio: 'ignore' });\n    return true;\n  } catch (e) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "scripts/check-dart.js",
       "line": 7,
       "excerpt": "function checkCommand(cmd) {\n  try {\n    execSync(`${cmd} --version`, { stdio: 'ignore' });\n    return true;\n  } catch (e) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "bin/cli.js",
       "line": 55,
       "excerpt": "        // Handle redirects\n        if (response.statusCode === 302 || response.statusCode === 301) {\n          request(response.headers.location);\n          return;\n        }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "bin/cli.js",
       "line": 77,
       "excerpt": "    };\n\n    request(url);\n  });\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/postinstall.js",
       "line": 37,
       "excerpt": "      https.get(url, (response) => {\n        if (response.statusCode === 302 || response.statusCode === 301) {\n          request(response.headers.location);\n          return;\n        }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/postinstall.js",
       "line": 67,
       "excerpt": "    };\n\n    request(url);\n  });\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/postinstall.js",
       "line": 117,
       "excerpt": "      https.get(reqUrl, (response) => {\n        if (response.statusCode === 302 || response.statusCode === 301) {\n          request(response.headers.location);\n          return;\n        }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/postinstall.js",
       "line": 133,
       "excerpt": "    };\n\n    request(url);\n  });\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 66,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 45 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 12 issue(s) in the last 6 months: 130.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 45 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 25,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.theYahia/roistat-mcp",
   "version": "1.0.1",
   "slug": "io-github-theyahia-roistat-mcp",
   "scanned_at": "2026-10-16T02:50:06+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/theYahia/roistat-mcp",
   "package": "npm:@theyahia/roistat-mcp@1.0.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "403be061b30eef6f684d2bf57dcb3ef10c93cd78",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 10,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 91,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 38,
       "excerpt": "\n    try {\n      const response = await fetch(url, {\n        method: \"POST\",\n        headers: this.headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/client.ts",
       "line": 75,
       "excerpt": "\n    try {\n      const response = await fetch(url, {\n        headers: this.headers,\n        signal: controller.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 70,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 41 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 24,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.theluckystrike/calendar-ics-reader-events-freebusy-conflicts",
   "version": "0.22.6",
   "slug": "io-github-theluckystrike-calendar-ics-reader-events-freebusy-conflicts",
   "scanned_at": "2026-10-16T02:50:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/theluckystrike/mcp-servers",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "8c7f724ed3f16364fd819ed14e97d7e3d9522e60",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 75,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly — the standard path from SSRF to credential theft on a hosted server.",
       "path": "src/fetch.ts",
       "line": 22,
       "excerpt": "  if (h === \"localhost\" || h.endsWith(\".localhost\")) return \"localhost\";\n  if (h.endsWith(\".local\") || h.endsWith(\".internal\") || h.endsWith(\".home.arpa\")) return \"a local network name\";\n  if (h === \"metadata.google.internal\") return \"a cloud metadata service\";\n  if (h === \"::1\" || h === \"0:0:0:0:0:0:0:1\") return \"the IPv6 loopback address\";\n  if (/^fe80:/i.test(h) || /^f[cd][0-9a-f]{2}:/i.test(h)) return \"a private IPv6 address\";",
       "url": "",
       "finding": "mcp-js-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/fetch.ts",
       "line": 60,
       "excerpt": "  let res: Response;\n  try {\n    res = await fetch(parsed.toString(), {\n      redirect: \"follow\",\n      signal: ctrl.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential requirement present; enforcement partially evidenced",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.zovo.one/mcp/calendar; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 6 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at server.appointment.json:28; Hex High Entropy String at server.itinerary.json:28; Hex High Entropy String at server.json:28; Hex High Entropy String at server.json.pub:28; Hex High Entropy String at server.mcpb.json:28; Hex High Entropy String at server.variant.json:28",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "10 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 4 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 38,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.theluckystrike/fixed-assets",
   "version": "0.22.6",
   "slug": "io-github-theluckystrike-fixed-assets",
   "scanned_at": "2026-10-16T02:50:14+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/theluckystrike/mcp-servers",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "8c7f724ed3f16364fd819ed14e97d7e3d9522e60",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 6,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 5 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at server.fixed-assets.json:28; Hex High Entropy String at server.json:28; Hex High Entropy String at server.json.pub:28; Hex High Entropy String at server.mcpb.json:28; Hex High Entropy String at server.variant.json:28",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "7 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.5",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 4 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.tlkc888-Jenkins/joy",
   "version": "2.40.0",
   "slug": "io-github-tlkc888-jenkins-joy",
   "scanned_at": "2026-10-16T02:50:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/tlkc888-Jenkins/Joy",
   "package": "npm:@joy-trust/mcp-server@2.40.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1115,
   "files_pruned": 8,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 11,
     "reason": "5 findings in test code are listed but not deducted; 8 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 1 file could not be parsed and was not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 4,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "cli/index.js",
       "line": 116,
       "excerpt": "\n  try {\n    execSync(`claude mcp add --transport http ${result.agent.name} ${endpoint}`, { stdio: 'inherit' });\n    console.log(`\\n${colors.green}Successfully added ${result.agent.name} to Claude${colors.reset}\\n`);\n  } catch (err) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "cli/index.js",
       "line": 116,
       "excerpt": "\n  try {\n    execSync(`claude mcp add --transport http ${result.agent.name} ${endpoint}`, { stdio: 'inherit' });\n    console.log(`\\n${colors.green}Successfully added ${result.agent.name} to Claude${colors.reset}\\n`);\n  } catch (err) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-pickle-loads (critical/medium)",
       "detail": "Attacker-reachable input is unpickled. pickle executes constructors during load, so a crafted payload is arbitrary code execution — this is not a hardening issue, it is the documented behaviour of the format.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/util/cache.py",
       "line": 217,
       "excerpt": "                        )\n                        return None\n                    return pickle.loads(payload)\n            except Exception as e:\n                logger.error(f\"Redis error during cache check for {func_name}: {e}\")",
       "url": "",
       "finding": "mcp-python-pickle-loads",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-metadata-endpoint (critical/medium)",
       "detail": "The cloud instance-metadata endpoint is contacted directly. On a hosted MCP server this is the canonical path from SSRF to credential theft: 169.254.169.254 serves IAM role credentials to anything that asks.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/util/metrics.py",
       "line": 97,
       "excerpt": "        # Google metadata DNS errors — expected in non-GCP environments\n        if (\n            \"metadata.google.internal\" in exc_msg\n            and settings.config.behave_as != BehaveAs.CLOUD\n        ):",
       "url": "",
       "finding": "mcp-python-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/scripts/generate-api-queries.ts",
       "line": 54,
       "excerpt": "  try {\n    // Fetch the OpenAPI spec to a temp file\n    execSync(`curl \"${openApiUrl}\" -o \"${tmpOutputPath}\"`, {\n      stdio: \"inherit\",\n    });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/scripts/generate-api-queries.ts",
       "line": 54,
       "excerpt": "  try {\n    // Fetch the OpenAPI spec to a temp file\n    execSync(`curl \"${openApiUrl}\" -o \"${tmpOutputPath}\"`, {\n      stdio: \"inherit\",\n    });",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/scripts/generate-api-queries.ts",
       "line": 59,
       "excerpt": "\n    // Format with prettier\n    execSync(`prettier --write \"${tmpOutputPath}\"`, { stdio: \"inherit\" });\n\n    // Move temp file to final output path",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/scripts/generate-api-queries.ts",
       "line": 59,
       "excerpt": "\n    // Format with prettier\n    execSync(`prettier --write \"${tmpOutputPath}\"`, { stdio: \"inherit\" });\n\n    // Move temp file to final output path",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "agents/code-reviewer/agent.py",
       "line": 51,
       "excerpt": "        \"\"\"Make request to Joy API\"\"\"\n        url = f\"{JOY_BASE_URL}{path}\"\n        response = requests.request(method, url, headers=self.joy_headers, **kwargs)\n        if response.status_code >= 400:\n            print(f\"[Joy] Error {response.status_code}: {response.text[:200]}\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "agents/researcher/agent.py",
       "line": 51,
       "excerpt": "        \"\"\"Make request to Joy API\"\"\"\n        url = f\"{JOY_BASE_URL}{path}\"\n        response = requests.request(method, url, headers=self.joy_headers, **kwargs)\n        if response.status_code >= 400:\n            print(f\"[Joy] Error {response.status_code}: {response.text[:200]}\")",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "autonomous-moderator.js",
       "line": 227,
       "excerpt": "      const timeout = setTimeout(() => controller.abort(), 5000);\n\n      const response = await fetch(agent.endpoint, {\n        method: 'HEAD',\n        signal: controller.signal",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "claude-agent/main.py",
       "line": 119,
       "excerpt": "    try:\n        headers = {\"x-api-key\": JOY_API_KEY}\n        response = httpx.get(\n            f\"{JOY_API_URL}/messages\",\n            headers=headers,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "claude-agent/main.py",
       "line": 182,
       "excerpt": "            \"content\": content\n        }\n        response = httpx.post(\n            f\"{JOY_API_URL}/messages\",\n            headers=headers,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "claude-agent/main.py",
       "line": 204,
       "excerpt": "    try:\n        headers = {\"x-api-key\": JOY_API_KEY}\n        response = httpx.get(\n            f\"{JOY_API_URL}/messages\",\n            headers=headers,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "claude-agent/main.py",
       "line": 240,
       "excerpt": "\n            headers = {\"x-api-key\": JOY_API_KEY}\n            response = httpx.get(\n                f\"{JOY_API_URL}/messages\",\n                headers=headers,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "docs/autogpt_research/.github/workflows/scripts/check_actions_status.py",
       "line": 39,
       "excerpt": "    try:\n        print(\"Making API request to:\", url)\n        response = requests.get(url, headers=headers, timeout=10)\n        response.raise_for_status()\n        return response.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/blocks/mcp/client.py",
       "line": 136,
       "excerpt": "            extra_headers=headers,\n        )\n        response = await requests.post(self.server_url, json=payload)\n\n        # Capture session ID from response (MCP Streamable HTTP transport)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/blocks/mcp/client.py",
       "line": 179,
       "excerpt": "            extra_headers=headers,\n        )\n        await requests.post(self.server_url, json=notification)\n\n    async def discover_auth(self) -> dict[str, Any] | None:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/blocks/mcp/client.py",
       "line": 210,
       "excerpt": "        for url in candidates:\n            try:\n                resp = await requests.get(url)\n                if resp.status == 200:\n                    data = resp.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/blocks/mcp/client.py",
       "line": 251,
       "excerpt": "        for url in candidates:\n            try:\n                resp = await requests.get(url)\n                if resp.status == 200:\n                    data = resp.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/cli/oauth_tool.py",
       "line": 962,
       "excerpt": "                    )\n\n                    with urlopen(req) as response:\n                        response_body = response.read()\n                        self.send_response(response.status)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/cli/oauth_tool.py",
       "line": 1010,
       "excerpt": "                    )\n\n                    with urlopen(req) as response:\n                        response_body = response.read()\n                        self.send_response(response.status)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/executor/automod/manager.py",
       "line": 341,
       "excerpt": "\n        try:\n            response = await requests.post(\n                url, json=request_data.model_dump(), timeout=self.config.timeout\n            )",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/public/mockServiceWorker.js",
       "line": 238,
       "excerpt": "    }\n\n    return fetch(requestClone, { headers })\n  }\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactPanel/components/useArtifactContent.ts",
       "line": 83,
       "excerpt": "      setContent(null);\n      setPdfUrl(null);\n      fetch(artifact.sourceUrl)\n        .then((res) => {\n          if (!res.ok) throw new Error(`Failed to fetch: ${res.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactPanel/components/useArtifactContent.ts",
       "line": 124,
       "excerpt": "      };\n    }\n    fetch(artifact.sourceUrl)\n      .then((res) => {\n        if (!res.ok) throw new Error(`Failed to fetch: ${res.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactPanel/downloadArtifact.ts",
       "line": 20,
       "excerpt": "      .replace(/[\\\\/:*?\"<>|\\x00-\\x1f]/g, \"_\")\n      .replace(/^\\.+/, \"\") || \"download\";\n  return fetch(artifact.sourceUrl)\n    .then((res) => {\n      if (!res.ok) throw new Error(`Download failed: ${res.status}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "docs/autogpt_research/autogpt_platform/frontend/src/app/(platform)/copilot/components/ArtifactPanel/useArtifactPanel.ts",
       "line": 96,
       "excerpt": "    const textPromise = cached\n      ? Promise.resolve(cached)\n      : fetch(activeArtifact.sourceUrl).then((res) => {\n          if (!res.ok) throw new Error(`Copy failed: ${res.status}`);\n          return res.text();",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "joy-router/server.js",
       "line": 43,
       "excerpt": "  if (body) options.body = JSON.stringify(body);\n\n  const response = await fetch(url, options);\n  const data = await response.json();\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "langchain-joy/langchain_joy/tools.py",
       "line": 42,
       "excerpt": "            payload[\"endpoint\"] = endpoint\n\n        response = requests.post(f\"{JOY_API_URL}/agents/register\", json=payload)\n        return response.json()\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "langchain-joy/langchain_joy/tools.py",
       "line": 77,
       "excerpt": "            headers[\"X-API-Key\"] = self.api_key\n\n        response = requests.get(f\"{JOY_API_URL}/agents/discover\", params=params, headers=headers)\n        return response.json()\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "langchain-joy/langchain_joy/tools.py",
       "line": 107,
       "excerpt": "        headers = {\"X-API-Key\": self.api_key}\n\n        response = requests.post(f\"{JOY_API_URL}/vouches\", json=payload, headers=headers)\n        return response.json()\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "langchain-joy/langchain_joy/tools.py",
       "line": 137,
       "excerpt": "        headers = {\"X-API-Key\": self.api_key}\n\n        response = requests.post(f\"{JOY_API_URL}/messages\", json=payload, headers=headers)\n        return response.json()\n",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "langchain-joy/langchain_joy/tools.py",
       "line": 164,
       "excerpt": "            headers[\"X-API-Key\"] = self.api_key\n\n        response = requests.get(f\"{JOY_API_URL}/agents/{agent_id}\", headers=headers)\n        return response.json()",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "mcp-server/index.js",
       "line": 44,
       "excerpt": "  };\n\n  const response = await fetch(url, { ...options, headers });\n  return response.json();\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "packages/joy-python/joy_trust.py",
       "line": 62,
       "excerpt": "\n        try:\n            with urllib.request.urlopen(req, timeout=30) as response:\n                return json.loads(response.read().decode())\n        except urllib.error.HTTPError as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "prs/crewai-implementation/joy_trust.py",
       "line": 27,
       "excerpt": "    \"\"\"\n    try:\n        r = requests.get(\n            f\"{JOY_API}/trust/{agent_id}\",\n            timeout=REQUEST_TIMEOUT",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "prs/crewai-implementation/joy_trust.py",
       "line": 70,
       "excerpt": "    \"\"\"\n    try:\n        r = requests.get(\n            f\"{JOY_API}/agents/discover\",\n            params={",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "prs/crewai-implementation/joy_trust.py",
       "line": 119,
       "excerpt": "    \"\"\"\n    try:\n        r = requests.get(\n            f\"{JOY_API}/agents/{agent_id}\",\n            timeout=REQUEST_TIMEOUT",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "prs/crewai-implementation/joy_trust.py",
       "line": 173,
       "excerpt": "                headers[\"X-API-Key\"] = self.api_key\n\n            r = requests.get(\n                f\"{JOY_API}/trust/{agent_id}\",\n                headers=headers,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "prs/langchain-implementation/joy_trust.py",
       "line": 25,
       "excerpt": "    \"\"\"Get trust score for an agent from Joy network.\"\"\"\n    try:\n        r = requests.get(f\"{JOY_API}/trust/{agent_id}\", timeout=REQUEST_TIMEOUT)\n        if r.status_code == 200:\n            return r.json().get(\"score\", 0)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "prs/langchain-implementation/joy_trust.py",
       "line": 166,
       "excerpt": "        \"\"\"\n        try:\n            r = requests.get(\n                f\"{JOY_API}/agents/discover\",\n                params={",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "prs/langchain-implementation/joy_trust.py",
       "line": 193,
       "excerpt": "        \"\"\"Get full agent details.\"\"\"\n        try:\n            r = requests.get(\n                f\"{JOY_API}/agents/{agent_id}\",\n                headers=self.headers,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "sdk/mcp-trust-middleware.js",
       "line": 28,
       "excerpt": "      : `${JOY_API}/trust/${agentId}`;\n\n    const response = await fetch(url, {\n      method: 'GET',\n      headers: { 'Accept': 'application/json' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "sdk/python/langchain-joy/langchain_joy/__init__.py",
       "line": 25,
       "excerpt": "    \"\"\"Get trust score for an agent from Joy network.\"\"\"\n    try:\n        r = requests.get(f\"{JOY_API}/trust/{agent_id}\", timeout=REQUEST_TIMEOUT)\n        if r.status_code == 200:\n            return r.json().get(\"score\", 0)",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "sdk/python/langchain-joy/langchain_joy/__init__.py",
       "line": 150,
       "excerpt": "        \"\"\"Find agents with specific capability above trust threshold.\"\"\"\n        try:\n            r = requests.get(\n                f\"{JOY_API}/agents/discover\",\n                params={",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "sdk/python/langchain-joy/langchain_joy/__init__.py",
       "line": 177,
       "excerpt": "        \"\"\"Get full agent details.\"\"\"\n        try:\n            r = requests.get(\n                f\"{JOY_API}/agents/{agent_id}\",\n                headers=self.headers,",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "trust-provider/index.ts",
       "line": 71,
       "excerpt": "\n    try {\n      const response = await fetch(url, {\n        method,\n        headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any part of it is caller-supplied, the server can be steered at internal hosts — cloud metadata endpoints, admin ports, other tenants.",
       "path": "trust-provider/joy_trust.py",
       "line": 84,
       "excerpt": "\n        try:\n            with urllib.request.urlopen(req, timeout=10) as response:\n                return json.loads(response.read().decode())\n        except urllib.error.HTTPError as e:",
       "url": "",
       "finding": "mcp-python-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-ssrf-metadata-endpoint (critical/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. The cloud instance-metadata endpoint is contacted directly. On a hosted MCP server this is the canonical path from SSRF to credential theft: 169.254.169.254 serves IAM role credentials to anything that asks.",
       "path": "docs/autogpt_research/autogpt_platform/backend/backend/copilot/tools/agent_browser_integration_test.py",
       "line": 267,
       "excerpt": "    \"ssrf_url\",\n    [\n        \"http://169.254.169.254/\",  # AWS/GCP/Azure metadata endpoint\n        \"http://127.0.0.1/\",  # IPv4 loopback\n        \"http://10.0.0.1/\",  # RFC-1918 private range",
       "url": "",
       "finding": "mcp-python-ssrf-metadata-endpoint",
       "severity": "critical",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 61,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "credential enforcement present in source but not documented in the README",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://joy-connect.fly.dev/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "JSON Web Token at docs/autogpt_research/autogpt_platform/.env.default:8; JSON Web Token at docs/autogpt_research/autogpt_platform/.env.default:9; JSON Web Token at docs/autogpt_research/autogpt_platform/autogpt_libs/autogpt_libs/auth/jwt_utils_test.py:90; JSON Web Token at docs/autogpt_research/autogpt_platform/backend/.env.default:32; JSON Web Token at docs/autogpt_research/autogpt_platform/backend/load-tests/configs/environment.js:9; JSON Web Token at docs/autogpt_research/autogpt_platform/backend/load-tests/configs/environment.js:17; JSON Web Token at docs/autogpt_research/autogpt_platform/backend/load-tests/configs/environment.js:25; JSON Web Token at docs/autogpt_research/autogpt_platform/db/docker/docker-compose.yml:28; JSON Web Token at docs/autogpt_research/autogpt_platform/db/docker/docker-compose.yml:29; JSON Web Token at docs/autogpt_research/autogpt_platform/frontend/.env.default:3; …and 2078 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "2 vulnerabilities could not be placed in `03` §6's table and are listed but not scored; the dependencies in 3 requirements files (agents/code-reviewer/requirements.txt, agents/researcher/requirements.txt, joy-telegram/requirements.txt) were not measured — they pin no exact version, or could not be read whole — so the score covers the 5 lockfiles that were",
     "assessed_weight": "0.61",
     "fault": null,
     "evidence_omitted": 384,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "unpinned requirements",
       "detail": "18 vulnerabilities osv-scanner reported at versions it resolved rather than read from a pin (agents/code-reviewer/requirements.txt, agents/researcher/requirements.txt, claude-agent/requirements.txt) are not attributed — nobody pinned those versions, so they say nothing about what this server ships",
       "path": "agents/code-reviewer/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "black 24.10.0 — PYSEC-2026-2120",
       "detail": "direct, CVSS 9.8, fixed in 26.3.0",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2120",
       "finding": "black:PYSEC-2026-2120",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "docs/autogpt_research/autogpt_platform/autogpt_libs/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.4 — PYSEC-2026-36",
       "detail": "direct, CVSS 9.8, fixed in 46.0.7",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-36",
       "finding": "cryptography:PYSEC-2026-36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "vitest 4.0.17 — GHSA-5xrq-8626-4rwp",
       "detail": "direct, CVSS 9.8, fixed in 4.1.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5xrq-8626-4rwp",
       "finding": "vitest:GHSA-5xrq-8626-4rwp",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.4.10 — GHSA-2xp9-vwfh-vxw4",
       "detail": "direct, CVSS 9.5, fixed in 15.5.24",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2xp9-vwfh-vxw4",
       "finding": "next:GHSA-2xp9-vwfh-vxw4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-2h9g-j24r-h63g",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2h9g-j24r-h63g",
       "finding": "orval:GHSA-2h9g-j24r-h63g",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-2w86-xfrc-g85r",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2w86-xfrc-g85r",
       "finding": "orval:GHSA-2w86-xfrc-g85r",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-3575-w9fc-c2j6",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3575-w9fc-c2j6",
       "finding": "orval:GHSA-3575-w9fc-c2j6",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-6437-gxhq-pqv8",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6437-gxhq-pqv8",
       "finding": "orval:GHSA-6437-gxhq-pqv8",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-653q-5476-x79g",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-653q-5476-x79g",
       "finding": "orval:GHSA-653q-5476-x79g",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-6mr6-jvcr-2f25",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6mr6-jvcr-2f25",
       "finding": "orval:GHSA-6mr6-jvcr-2f25",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-88f2-fpv8-89q2",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88f2-fpv8-89q2",
       "finding": "orval:GHSA-88f2-fpv8-89q2",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-8j6p-r8jg-mxqh",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-8j6p-r8jg-mxqh",
       "finding": "orval:GHSA-8j6p-r8jg-mxqh",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-fg9p-mrxr-hvq7",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-fg9p-mrxr-hvq7",
       "finding": "orval:GHSA-fg9p-mrxr-hvq7",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-p4cg-3328-rvfg",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p4cg-3328-rvfg",
       "finding": "orval:GHSA-p4cg-3328-rvfg",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "orval 7.13.0 — GHSA-w727-8j6c-2rj4",
       "detail": "direct, CVSS 9.3, fixed in 8.21.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w727-8j6c-2rj4",
       "finding": "orval:GHSA-w727-8j6c-2rj4",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "aiohttp 3.13.3 — PYSEC-2026-2102",
       "detail": "direct, CVSS 9.1, fixed in 3.13.4",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2102",
       "finding": "aiohttp:PYSEC-2026-2102",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4145",
       "detail": "direct, CVSS 9.1, fixed in 2.14.0",
       "path": "docs/autogpt_research/autogpt_platform/autogpt_libs/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4145",
       "detail": "direct, CVSS 9.1, fixed in 2.14.0",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.4.10 — GHSA-p293-qw3h-jr36",
       "detail": "direct, CVSS 9.0, fixed in 15.5.24",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p293-qw3h-jr36",
       "finding": "next:GHSA-p293-qw3h-jr36",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "protobufjs 7.5.4 — GHSA-xq3m-2v4x-88gg",
       "detail": "transitive, CVSS 9.8, fixed in 7.5.5",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-xq3m-2v4x-88gg",
       "finding": "protobufjs:GHSA-xq3m-2v4x-88gg",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@orval/core 7.13.0 — GHSA-h526-wf6g-67jv",
       "detail": "transitive, CVSS 9.3, fixed in 7.19.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-h526-wf6g-67jv",
       "finding": "@orval/core:GHSA-h526-wf6g-67jv",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@orval/mcp 7.13.0 — GHSA-mwr6-3gp8-9jmj",
       "detail": "transitive, CVSS 9.3, fixed in 7.18.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwr6-3gp8-9jmj",
       "finding": "@orval/mcp:GHSA-mwr6-3gp8-9jmj",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.9.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "docs/autogpt_research/autogpt_platform/autogpt_libs/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.12.1 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "shell-quote 1.8.3 — GHSA-w7jw-789q-3m8p",
       "detail": "transitive, CVSS 9.2, fixed in 1.8.4",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w7jw-789q-3m8p",
       "finding": "shell-quote:GHSA-w7jw-789q-3m8p",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-rgj7-g3m4-5g8c",
       "detail": "direct, CVSS 8.9, fixed in 0.35.4",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgj7-g3m4-5g8c",
       "finding": "sharp:GHSA-rgj7-g3m4-5g8c",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sharp 0.34.5 — GHSA-wq5f-xc86-pv6w",
       "detail": "direct, CVSS 8.9, fixed in 0.35.5",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wq5f-xc86-pv6w",
       "finding": "sharp:GHSA-wq5f-xc86-pv6w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "storybook 9.1.5 — GHSA-mjf5-7g4m-gx5w",
       "detail": "direct, CVSS 8.9, fixed in 9.1.19",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mjf5-7g4m-gx5w",
       "finding": "storybook:GHSA-mjf5-7g4m-gx5w",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "happy-dom 20.3.4 — GHSA-6q6h-j7hj-3r64",
       "detail": "direct, CVSS 8.8, fixed in 20.8.8",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6q6h-j7hj-3r64",
       "finding": "happy-dom:GHSA-6q6h-j7hj-3r64",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "yt-dlp 2025.12.8 — PYSEC-2026-3432",
       "detail": "direct, CVSS 8.8, fixed in 2026.02.21",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3432",
       "finding": "yt-dlp:PYSEC-2026-3432",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "black 24.10.0 — PYSEC-2026-2121",
       "detail": "direct, CVSS 8.7, fixed in 26.3.1",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2121",
       "finding": "black:PYSEC-2026-2121",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-3553",
       "detail": "direct, CVSS 8.7, fixed in 49.0.0",
       "path": "docs/autogpt_research/autogpt_platform/autogpt_libs/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.4 — PYSEC-2026-3553",
       "detail": "direct, CVSS 8.7, fixed in 49.0.0",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3553",
       "finding": "cryptography:PYSEC-2026-3553",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sqlparse 0.5.5 — PYSEC-2026-3697",
       "detail": "direct, CVSS 8.7, fixed in 0.6.0",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3697",
       "finding": "sqlparse:PYSEC-2026-3697",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sqlparse 0.5.5 — PYSEC-2026-3699",
       "detail": "direct, CVSS 8.7, fixed in 0.6.0",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3699",
       "finding": "sqlparse:PYSEC-2026-3699",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.4.10 — GHSA-c4j6-fc7j-m34r",
       "detail": "direct, CVSS 8.6, fixed in 15.5.16",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c4j6-fc7j-m34r",
       "finding": "next:GHSA-c4j6-fc7j-m34r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.4.10 — GHSA-89xv-2m56-2m9x",
       "detail": "direct, CVSS 8.3, fixed in 15.5.21",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-89xv-2m56-2m9x",
       "finding": "next:GHSA-89xv-2m56-2m9x",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.4.10 — GHSA-p9j2-gv94-2wf4",
       "detail": "direct, CVSS 8.3, fixed in 15.5.21",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-p9j2-gv94-2wf4",
       "finding": "next:GHSA-p9j2-gv94-2wf4",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "yt-dlp 2025.12.8 — PYSEC-2026-3430",
       "detail": "direct, CVSS 8.3, fixed in 2026.6.9",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3430",
       "finding": "yt-dlp:PYSEC-2026-3430",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "yt-dlp 2025.12.8 — PYSEC-2026-3433",
       "detail": "direct, CVSS 8.3, fixed in 2026.6.9",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3433",
       "finding": "yt-dlp:PYSEC-2026-3433",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.4 — PYSEC-2026-2141",
       "detail": "direct, CVSS 8.2, fixed in 46.0.5",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-2141",
       "finding": "cryptography:PYSEC-2026-2141",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.5 — PYSEC-2026-3552",
       "detail": "direct, CVSS 8.2, fixed in 50.0.0",
       "path": "docs/autogpt_research/autogpt_platform/autogpt_libs/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "cryptography 46.0.4 — PYSEC-2026-3552",
       "detail": "direct, CVSS 8.2, fixed in 50.0.0",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "gunicorn 21.2.0 — PYSEC-2026-1434",
       "detail": "direct, CVSS 8.2, fixed in 22.0.0",
       "path": "claude-agent/requirements.txt",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-1434",
       "finding": "gunicorn:PYSEC-2026-1434",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "next 15.4.10 — GHSA-m99w-x7hq-7vfj",
       "detail": "direct, CVSS 8.2, fixed in 15.5.21",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-m99w-x7hq-7vfj",
       "finding": "next:GHSA-m99w-x7hq-7vfj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4183",
       "detail": "direct, CVSS 8.2, fixed in 2.15.0",
       "path": "docs/autogpt_research/autogpt_platform/autogpt_libs/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.11.0 — PYSEC-2026-4183",
       "detail": "direct, CVSS 8.2, fixed in 2.15.0",
       "path": "docs/autogpt_research/autogpt_platform/backend/poetry.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "lodash 4.17.21 — GHSA-r5fr-rjxr-66jc",
       "detail": "direct, CVSS 8.1, fixed in 4.18.0",
       "path": "docs/autogpt_research/autogpt_platform/frontend/pnpm-lock.yaml",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-r5fr-rjxr-66jc",
       "finding": "lodash:GHSA-r5fr-rjxr-66jc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "docs/autogpt_research/LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "prs/README.md: states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "docs/autogpt_research/SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.tsviz/actions-pulse",
   "version": "2.3.0",
   "slug": "io-github-tsviz-actions-pulse",
   "scanned_at": "2026-10-16T02:51:35+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/tsviz/github-mcp-server-devops",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "216028e6362edb361e4fae1066271dfd802a4b97",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 19,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 87,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/github/org-client.ts",
       "line": 190,
       "excerpt": "        result.permissions = {};\n        for (const scope of result.scopes) {\n          result.permissions[scope] = {\n            granted: true,\n            description: (PAT_SCOPES as any)[scope] || 'Unknown scope',",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/github/org-client.ts",
       "line": 1118,
       "excerpt": "        // Initialize repo stats\n        if (!byRepository[repoName]) {\n          byRepository[repoName] = { runs: 0, minutes: 0, success: 0, failure: 0 };\n        }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/github/org-client.ts",
       "line": 1299,
       "excerpt": "        // Initialize repo stats\n        if (!byRepository[repoName]) {\n          byRepository[repoName] = { runs: 0, durations: [], queueTimes: [], failures: 0 };\n        }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/config/config-loader.ts",
       "line": 373,
       "excerpt": "        if (file.includes(policyType) && (file.endsWith('.yaml') || file.endsWith('.yml') || file.endsWith('.json'))) {\n          try {\n            const content = await fs.readFile(path.join(policyPath, file), 'utf-8');\n            const policy = this.parseConfig<T>(content, file);\n            policies.push(policy);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "src/config/config-loader.ts",
       "line": 494,
       "excerpt": "        if (file.endsWith('.yaml') || file.endsWith('.yml') || file.endsWith('.json')) {\n          try {\n            const content = await fs.readFile(path.join(dashboardPath, file), 'utf-8');\n            const dashboard = this.parseConfig<DashboardConfig>(content, file);\n            dashboards.push(dashboard);",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Base64 High Entropy String at README.md:347; Base64 High Entropy String at docs/CONFIGURATION.md:89; Base64 High Entropy String at docs/QUICKSTART.md:47; Base64 High Entropy String at examples/mcp-docker.json:9",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "33 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 52,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 250 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (13 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 250 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 56,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "basic-ftp 5.1.0 — GHSA-5rq4-664w-9x2c",
       "detail": "transitive, CVSS 9.1, fixed in 5.2.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5rq4-664w-9x2c",
       "finding": "basic-ftp:GHSA-5rq4-664w-9x2c",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "proxy-addr 2.0.7 — GHSA-jqcg-44mw-7w3h",
       "detail": "transitive, CVSS 9.1, fixed in 2.0.8",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqcg-44mw-7w3h",
       "finding": "proxy-addr:GHSA-jqcg-44mw-7w3h",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.25.3 — GHSA-6qxp-vccf-f47h",
       "detail": "direct, CVSS 7.5, fixed in 1.31.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6qxp-vccf-f47h",
       "finding": "@modelcontextprotocol/sdk:GHSA-6qxp-vccf-f47h",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@modelcontextprotocol/sdk 1.25.3 — GHSA-345p-7cg4-v4c7",
       "detail": "direct, CVSS 7.1, fixed in 1.26.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-345p-7cg4-v4c7",
       "finding": "@modelcontextprotocol/sdk:GHSA-345p-7cg4-v4c7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "flatted 3.3.3 — GHSA-rf6f-7fwh-wjgh",
       "detail": "transitive, CVSS 8.9, fixed in 3.4.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rf6f-7fwh-wjgh",
       "finding": "flatted:GHSA-rf6f-7fwh-wjgh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "braces 3.0.3 — GHSA-vfj7-8cjw-p6xm",
       "detail": "transitive, CVSS 8.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-vfj7-8cjw-p6xm",
       "finding": "braces:GHSA-vfj7-8cjw-p6xm",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-3ppc-4f35-3m26",
       "detail": "transitive, CVSS 8.7, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3ppc-4f35-3m26",
       "finding": "minimatch:GHSA-3ppc-4f35-3m26",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "extract-zip 2.0.1 — GHSA-jmr9-qjv8-65gv",
       "detail": "transitive, CVSS 8.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jmr9-qjv8-65gv",
       "finding": "extract-zip:GHSA-jmr9-qjv8-65gv",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.1.0 — GHSA-6v7q-wjvx-w8wg",
       "detail": "transitive, CVSS 8.2, fixed in 5.2.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6v7q-wjvx-w8wg",
       "finding": "basic-ftp:GHSA-6v7q-wjvx-w8wg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.1.0 — GHSA-c475-qrg2-pj4r",
       "detail": "transitive, CVSS 8.2, fixed in 6.2.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c475-qrg2-pj4r",
       "finding": "basic-ftp:GHSA-c475-qrg2-pj4r",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "extract-zip 2.0.1 — GHSA-7pqw-9j4j-h8q3",
       "detail": "transitive, CVSS 8.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7pqw-9j4j-h8q3",
       "finding": "extract-zip:GHSA-7pqw-9j4j-h8q3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-3jxr-9vmj-r5cp",
       "detail": "transitive, CVSS 7.7, fixed in 1.1.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-3jxr-9vmj-r5cp",
       "finding": "brace-expansion:GHSA-3jxr-9vmj-r5cp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ip-address 10.1.0 — GHSA-mwp4-54f8-5fhr",
       "detail": "transitive, CVSS 7.7, fixed in 10.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mwp4-54f8-5fhr",
       "finding": "ip-address:GHSA-mwp4-54f8-5fhr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "@hono/node-server 1.19.9 — GHSA-wc8c-qw6v-h7f6",
       "detail": "transitive, CVSS 7.5, fixed in 1.19.10",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-wc8c-qw6v-h7f6",
       "finding": "@hono/node-server:GHSA-wc8c-qw6v-h7f6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.1.0 — GHSA-rp42-5vxx-qpwr",
       "detail": "transitive, CVSS 7.5, fixed in 5.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rp42-5vxx-qpwr",
       "finding": "basic-ftp:GHSA-rp42-5vxx-qpwr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "basic-ftp 5.1.0 — GHSA-rpmf-866q-6p89",
       "detail": "transitive, CVSS 7.5, fixed in 5.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rpmf-866q-6p89",
       "finding": "basic-ftp:GHSA-rpmf-866q-6p89",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-6j4f-fj2g-mc7p",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.19",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-6j4f-fj2g-mc7p",
       "finding": "brace-expansion:GHSA-6j4f-fj2g-mc7p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-mh99-v99m-4gvg",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.17",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-mh99-v99m-4gvg",
       "finding": "brace-expansion:GHSA-mh99-v99m-4gvg",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-qhr7-859c-m2p7",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.20",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qhr7-859c-m2p7",
       "finding": "brace-expansion:GHSA-qhr7-859c-m2p7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-rgw5-rvv9-x895",
       "detail": "transitive, CVSS 7.5, fixed in 1.1.18",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-rgw5-rvv9-x895",
       "finding": "brace-expansion:GHSA-rgw5-rvv9-x895",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.1 — GHSA-73wf-gq98-2v4g",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-73wf-gq98-2v4g",
       "finding": "browserslist:GHSA-73wf-gq98-2v4g",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "browserslist 4.28.1 — GHSA-c83g-rgw3-j3cx",
       "detail": "transitive, CVSS 7.5, fixed in 4.28.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c83g-rgw3-j3cx",
       "finding": "browserslist:GHSA-c83g-rgw3-j3cx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-4c8g-83qw-93j6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-4c8g-83qw-93j6",
       "finding": "fast-uri:GHSA-4c8g-83qw-93j6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-7p8r-x3mc-p8w7",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.5",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7p8r-x3mc-p8w7",
       "finding": "fast-uri:GHSA-7p8r-x3mc-p8w7",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-f65p-4m7j-42xc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f65p-4m7j-42xc",
       "finding": "fast-uri:GHSA-f65p-4m7j-42xc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-jqff-g426-hqxp",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.6",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-jqff-g426-hqxp",
       "finding": "fast-uri:GHSA-jqff-g426-hqxp",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-q3j6-qgpj-74h6",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q3j6-qgpj-74h6",
       "finding": "fast-uri:GHSA-q3j6-qgpj-74h6",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-qw65-cvwx-89v3",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.7",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-qw65-cvwx-89v3",
       "finding": "fast-uri:GHSA-qw65-cvwx-89v3",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v2hh-gcrm-f6hx",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v2hh-gcrm-f6hx",
       "finding": "fast-uri:GHSA-v2hh-gcrm-f6hx",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "fast-uri 3.1.0 — GHSA-v39h-62p7-jpjc",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-v39h-62p7-jpjc",
       "finding": "fast-uri:GHSA-v39h-62p7-jpjc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "flatted 3.3.3 — GHSA-25h7-pfq9-p65f",
       "detail": "transitive, CVSS 7.5, fixed in 3.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-25h7-pfq9-p65f",
       "finding": "flatted:GHSA-25h7-pfq9-p65f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.11.5 — GHSA-q5qw-h33p-qvwr",
       "detail": "transitive, CVSS 7.5, fixed in 4.12.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-q5qw-h33p-qvwr",
       "finding": "hono:GHSA-q5qw-h33p-qvwr",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-2883-xcg3-v3hh",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-2883-xcg3-v3hh",
       "finding": "js-yaml:GHSA-2883-xcg3-v3hh",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-52cp-r559-cp3m",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-52cp-r559-cp3m",
       "finding": "js-yaml:GHSA-52cp-r559-cp3m",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 3.14.2 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 3.15.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "js-yaml 4.1.1 — GHSA-5p4m-2wfm-xmqj",
       "detail": "transitive, CVSS 7.5, fixed in 4.3.1",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-5p4m-2wfm-xmqj",
       "finding": "js-yaml:GHSA-5p4m-2wfm-xmqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-23c5-xmqv-rm74",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.4",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-23c5-xmqv-rm74",
       "finding": "minimatch:GHSA-23c5-xmqv-rm74",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "minimatch 3.1.2 — GHSA-7r86-cg39-jmmj",
       "detail": "transitive, CVSS 7.5, fixed in 3.1.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-7r86-cg39-jmmj",
       "finding": "minimatch:GHSA-7r86-cg39-jmmj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 0.1.12 — GHSA-37ch-88jc-xwx2",
       "detail": "transitive, CVSS 7.5, fixed in 0.1.13",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-37ch-88jc-xwx2",
       "finding": "path-to-regexp:GHSA-37ch-88jc-xwx2",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "path-to-regexp 8.3.0 — GHSA-j3q9-mxjg-w52f",
       "detail": "transitive, CVSS 7.5, fixed in 8.4.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-j3q9-mxjg-w52f",
       "finding": "path-to-regexp:GHSA-j3q9-mxjg-w52f",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "picomatch 2.3.1 — GHSA-c2c7-rcm5-vvqj",
       "detail": "transitive, CVSS 7.5, fixed in 2.3.2",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-c2c7-rcm5-vvqj",
       "finding": "picomatch:GHSA-c2c7-rcm5-vvqj",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "ws 8.19.0 — GHSA-96hv-2xvq-fx4p",
       "detail": "transitive, CVSS 7.5, fixed in 8.21.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-96hv-2xvq-fx4p",
       "finding": "ws:GHSA-96hv-2xvq-fx4p",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.11.5 — GHSA-88fw-hqm2-52qc",
       "detail": "transitive, CVSS 7.1, fixed in 4.12.25",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-88fw-hqm2-52qc",
       "finding": "hono:GHSA-88fw-hqm2-52qc",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "yaml 2.8.2 — GHSA-48c2-rrv3-qjmp",
       "detail": "direct, CVSS 4.3, fixed in 2.8.3",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-48c2-rrv3-qjmp",
       "finding": "yaml:GHSA-48c2-rrv3-qjmp",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "sprintf-js 1.0.3 — GHSA-hp3w-g68c-fv3c",
       "detail": "transitive, CVSS 6.9",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-hp3w-g68c-fv3c",
       "finding": "sprintf-js:GHSA-hp3w-g68c-fv3c",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "baseline-browser-mapping 2.9.18 — GHSA-w5vr-8v7q-w6rv",
       "detail": "transitive, CVSS 6.6, fixed in 2.11.0",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-w5vr-8v7q-w6rv",
       "finding": "baseline-browser-mapping:GHSA-w5vr-8v7q-w6rv",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "brace-expansion 1.1.12 — GHSA-f886-m6hf-6m8v",
       "detail": "transitive, CVSS 6.5, fixed in 1.1.13",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-f886-m6hf-6m8v",
       "finding": "brace-expansion:GHSA-f886-m6hf-6m8v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "hono 4.11.5 — GHSA-9vqf-7f2p-gf9v",
       "detail": "transitive, CVSS 6.5, fixed in 4.12.16",
       "path": "package-lock.json",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-9vqf-7f2p-gf9v",
       "finding": "hono:GHSA-9vqf-7f2p-gf9v",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md, but README.md documents a disclosure route — `03` §7 accepts either",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.usekaneo/kaneo",
   "version": "0.1.13",
   "slug": "io-github-usekaneo-kaneo",
   "scanned_at": "2026-10-16T02:51:42+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/usekaneo/kaneo",
   "package": "npm:@kaneo/mcp@0.1.13",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "302e358cb1f4c5b736b049a8795f478a3c70ecaf",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3477,
   "files_pruned": 13,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 55,
     "reason": "scored on the declared repository, because the published package carries its code only as build output, which is not read as the server's own source; no tag matched this version, so the repository's default branch was read and the findings describe that code, not necessarily the release; 1 finding in test code is listed but not deducted; 13 vendored or minified paths were excluded before scanning; machine-generated bundles are not the server's own code; 3 files could not be parsed and were not scanned",
     "assessed_weight": "0.99",
     "fault": null,
     "evidence_omitted": 20,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/api/src/telegram-integration/controllers/telegram-controller.ts",
       "line": 74,
       "excerpt": "    ] as const) {\n      if (key in parsed) {\n        parsed[key] = \"[REDACTED]\";\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/api/src/workspace/controllers/get-my-capabilities.ts",
       "line": 19,
       "excerpt": "      permissions[resource] = [...actions];\n    }\n    result[name] = allows(permissions);\n  }\n  return result;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/site/hooks/use-task-filters.ts",
       "line": 42,
       "excerpt": "    if (Array.isArray(value)) {\n      const values = value.filter((v): v is string => typeof v === \"string\");\n      normalized[key] = values.length > 0 ? values : null;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/src/components/import/summarize-import-counts.ts",
       "line": 53,
       "excerpt": "    if (project.status !== \"completed\") continue;\n    for (const key of Object.keys(total) as (keyof ImportCounts)[]) {\n      total[key] += project.counts[key];\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/src/hooks/use-task-filters-with-labels-support.ts",
       "line": 67,
       "excerpt": "    if (Array.isArray(value)) {\n      const values = value.filter((v): v is string => typeof v === \"string\");\n      normalized[key] = values.length > 0 ? values : null;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/src/hooks/use-task-filters.ts",
       "line": 60,
       "excerpt": "    if (Array.isArray(value)) {\n      const values = value.filter((v): v is string => typeof v === \"string\");\n      normalized[key] = values.length > 0 ? values : null;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/src/hooks/use-workspace-permission.ts",
       "line": 24,
       "excerpt": "  const out = {} as CapabilityMap;\n  for (const key of WORKSPACE_CAPABILITY_NAMES) {\n    out[key] = false;\n  }\n  return out;",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "apps/web/src/lib/task-filters/count-values.ts",
       "line": 8,
       "excerpt": "  for (const item of items) {\n    for (const value of new Set(pick(item))) {\n      if (value) counts[value] = (counts[value] ?? 0) + 1;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/cli/src/render/table.ts",
       "line": 45,
       "excerpt": "      if (excess <= 0) return;\n      const current = widths[index] ?? 0;\n      widths[index] = Math.max(minWidth(index), current - excess);\n    }\n  };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "packages/mcp/src/install/merge-config.ts",
       "line": 56,
       "excerpt": "          continue;\n        }\n        map[key] = (raw as Record<string, unknown>)[key];\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/i18n/shared.mjs",
       "line": 107,
       "excerpt": "    const next = current[segment];\n    if (!next || typeof next !== \"object\" || Array.isArray(next)) {\n      current[segment] = {};\n    }\n    current = current[segment];",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/ui-review-bot/ci.mjs",
       "line": 107,
       "excerpt": "      );\n      await writeFile(path.join(output, name), PNG.sync.write(png));\n      item[side] = { ...diagnostics(raw[side], scenario, side), image: name };\n    }\n    if (scenario.focus) {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/import/destination-fetch.ts",
       "line": 8,
       "excerpt": "\nexport const destinationFetch: FetchLike = async (input, init) => {\n  const response = await fetch(input, {\n    ...(init as UndiciRequestInit),\n    dispatcher: agent,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/mcp/tools.ts",
       "line": 44,
       "excerpt": "\n    const url = `${this.baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n    const res = await fetch(url, {\n      ...init,\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/plugins/discord/client.ts",
       "line": 51,
       "excerpt": "      data: { integration: \"discord\" },\n    });\n    const response = await fetch(webhookUrl, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/plugins/gitea/utils/gitea-api.ts",
       "line": 107,
       "excerpt": "      data: { integration: \"gitea\" },\n    });\n    const res = await fetch(url, {\n      ...init,\n      signal: controller.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/plugins/gitlab/utils/gitlab-api.ts",
       "line": 148,
       "excerpt": "      data: { integration: \"gitlab\" },\n    });\n    const res = await fetch(url, {\n      ...init,\n      signal: controller.signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/plugins/mattermost/client.ts",
       "line": 26,
       "excerpt": "\n  try {\n    const response = await fetch(webhookUrl, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/plugins/slack/client.ts",
       "line": 39,
       "excerpt": "      data: { integration: \"slack\" },\n    });\n    const response = await fetch(webhookUrl, {\n      method: \"POST\",\n      headers: {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/utils/bounded-github-fetch.ts",
       "line": 19,
       "excerpt": "      deadline,\n      (async () => {\n        const response = await fetch(input, {\n          ...init,\n          redirect: \"error\",",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/api/src/utils/outbound-request.ts",
       "line": 84,
       "excerpt": "    controller.signal.throwIfAborted();\n    const response = await withoutOutboundTelemetry(() =>\n      fetch(url, {\n        ...init,\n        method: \"POST\",",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a non-literal and read or written without confinement. path.join does not resolve away `..`, and path.resolve discards the base entirely on an absolute second component.",
       "path": "apps/site/lib/blog/index.ts",
       "line": 45,
       "excerpt": "function readPost(file: string): BlogPost {\n  const slug = file.replace(/\\.md$/, \"\");\n  const raw = fs.readFileSync(path.join(CONTENT_DIR, file), \"utf8\");\n  const { data, content } = parseFrontmatter(raw, file);\n",
       "url": "",
       "finding": "mcp-js-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/components/project/task-view-keys/use-task-action-shortcuts.ts",
       "line": 107,
       "excerpt": "  const remove = { ...view, enabled: canDeleteTasks() };\n\n  useShortcut(\"changeStatus\", () => request(\"status\"), edit);\n  useShortcut(\"changePriority\", () => request(\"priority\"), edit);\n  useShortcut(\"assignTask\", () => request(\"assignee\"), assign);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/components/project/task-view-keys/use-task-action-shortcuts.ts",
       "line": 108,
       "excerpt": "\n  useShortcut(\"changeStatus\", () => request(\"status\"), edit);\n  useShortcut(\"changePriority\", () => request(\"priority\"), edit);\n  useShortcut(\"assignTask\", () => request(\"assignee\"), assign);\n  useShortcut(\"changeLabels\", () => request(\"labels\"), labels);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/components/project/task-view-keys/use-task-action-shortcuts.ts",
       "line": 109,
       "excerpt": "  useShortcut(\"changeStatus\", () => request(\"status\"), edit);\n  useShortcut(\"changePriority\", () => request(\"priority\"), edit);\n  useShortcut(\"assignTask\", () => request(\"assignee\"), assign);\n  useShortcut(\"changeLabels\", () => request(\"labels\"), labels);\n  useShortcut(\"setDueDate\", () => request(\"dueDate\"), edit);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/components/project/task-view-keys/use-task-action-shortcuts.ts",
       "line": 110,
       "excerpt": "  useShortcut(\"changePriority\", () => request(\"priority\"), edit);\n  useShortcut(\"assignTask\", () => request(\"assignee\"), assign);\n  useShortcut(\"changeLabels\", () => request(\"labels\"), labels);\n  useShortcut(\"setDueDate\", () => request(\"dueDate\"), edit);\n  useShortcut(\"deleteTask\", () => request(\"delete\"), remove);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/components/project/task-view-keys/use-task-action-shortcuts.ts",
       "line": 111,
       "excerpt": "  useShortcut(\"assignTask\", () => request(\"assignee\"), assign);\n  useShortcut(\"changeLabels\", () => request(\"labels\"), labels);\n  useShortcut(\"setDueDate\", () => request(\"dueDate\"), edit);\n  useShortcut(\"deleteTask\", () => request(\"delete\"), remove);\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/components/project/task-view-keys/use-task-action-shortcuts.ts",
       "line": 112,
       "excerpt": "  useShortcut(\"changeLabels\", () => request(\"labels\"), labels);\n  useShortcut(\"setDueDate\", () => request(\"dueDate\"), edit);\n  useShortcut(\"deleteTask\", () => request(\"delete\"), remove);\n\n  useShortcut(",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/discord-integration/create-discord-integration.ts",
       "line": 22,
       "excerpt": "  json: CreateDiscordIntegrationRequest,\n) {\n  const response = await fetch(\n    getApiUrl(`/discord-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/discord-integration/delete-discord-integration.ts",
       "line": 6,
       "excerpt": "\nasync function deleteDiscordIntegration(projectId: string) {\n  const response = await fetch(\n    getApiUrl(`/discord-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/discord-integration/get-discord-integration.ts",
       "line": 24,
       "excerpt": "\nasync function getDiscordIntegration(projectId: string) {\n  const response = await fetch(\n    getApiUrl(`/discord-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/discord-integration/update-discord-integration.ts",
       "line": 23,
       "excerpt": "  json: UpdateDiscordIntegrationRequest,\n) {\n  const response = await fetch(\n    getApiUrl(`/discord-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/generic-webhook-integration/create-generic-webhook-integration.ts",
       "line": 29,
       "excerpt": "  json: CreateGenericWebhookIntegrationRequest,\n) {\n  const response = await fetch(\n    getApiUrl(`/generic-webhook-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/generic-webhook-integration/delete-generic-webhook-integration.ts",
       "line": 6,
       "excerpt": "\nasync function deleteGenericWebhookIntegration(projectId: string) {\n  const response = await fetch(\n    getApiUrl(`/generic-webhook-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/generic-webhook-integration/get-generic-webhook-integration.ts",
       "line": 34,
       "excerpt": "  projectId: string,\n): Promise<GenericWebhookIntegration | null> {\n  const response = await fetch(\n    getApiUrl(`/generic-webhook-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/generic-webhook-integration/update-generic-webhook-integration.ts",
       "line": 30,
       "excerpt": "  json: UpdateGenericWebhookIntegrationRequest,\n) {\n  const response = await fetch(\n    getApiUrl(`/generic-webhook-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/mattermost-integration/create-mattermost-integration.ts",
       "line": 22,
       "excerpt": "  json: CreateMattermostIntegrationRequest,\n) {\n  const response = await fetch(\n    getApiUrl(`/mattermost-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/mattermost-integration/delete-mattermost-integration.ts",
       "line": 6,
       "excerpt": "\nasync function deleteMattermostIntegration(projectId: string) {\n  const response = await fetch(\n    getApiUrl(`/mattermost-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/mattermost-integration/get-mattermost-integration.ts",
       "line": 24,
       "excerpt": "\nasync function getMattermostIntegration(projectId: string) {\n  const response = await fetch(\n    getApiUrl(`/mattermost-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/mattermost-integration/update-mattermost-integration.ts",
       "line": 23,
       "excerpt": "  json: UpdateMattermostIntegrationRequest,\n) {\n  const response = await fetch(\n    getApiUrl(`/mattermost-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/mcp/get-authorization-request.ts",
       "line": 11,
       "excerpt": "  requestId: string,\n): Promise<McpAuthorizationRequest> {\n  const response = await fetch(\n    getApiUrl(`/mcp/authorize/request/${encodeURIComponent(requestId)}`),\n    { credentials: \"include\" },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/mcp/submit-authorization-decision.ts",
       "line": 7,
       "excerpt": "  approved: boolean,\n): Promise<string> {\n  const response = await fetch(\n    getApiUrl(`/mcp/authorize/request/${encodeURIComponent(requestId)}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/notification-preferences/delete-notification-workspace-rule.ts",
       "line": 8,
       "excerpt": "  workspaceId: string,\n): Promise<NotificationPreferences> {\n  const response = await fetch(\n    getApiUrl(`/notification-preferences/workspaces/${workspaceId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/notification-preferences/get-notification-preferences.ts",
       "line": 49,
       "excerpt": "\nasync function getNotificationPreferences(): Promise<NotificationPreferences> {\n  const response = await fetch(getApiUrl(\"/notification-preferences\"), {\n    credentials: \"include\",\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/notification-preferences/update-notification-preferences.ts",
       "line": 27,
       "excerpt": "  json: UpdateNotificationPreferencesRequest,\n): Promise<NotificationPreferences> {\n  const response = await fetch(getApiUrl(\"/notification-preferences\"), {\n    body: JSON.stringify(json),\n    credentials: \"include\",",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/notification-preferences/upsert-notification-workspace-rule.ts",
       "line": 19,
       "excerpt": "  json: UpsertNotificationWorkspaceRuleRequest,\n): Promise<NotificationPreferences> {\n  const response = await fetch(\n    getApiUrl(`/notification-preferences/workspaces/${workspaceId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/project/background.ts",
       "line": 13,
       "excerpt": "  const upload = await uploadResponse.json();\n\n  const storageResponse = await fetch(upload.uploadUrl, {\n    method: \"PUT\",\n    headers: upload.headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/slack-integration/create-slack-integration.ts",
       "line": 22,
       "excerpt": "  json: CreateSlackIntegrationRequest,\n) {\n  const response = await fetch(\n    getApiUrl(`/slack-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/slack-integration/delete-slack-integration.ts",
       "line": 6,
       "excerpt": "\nasync function deleteSlackIntegration(projectId: string) {\n  const response = await fetch(\n    getApiUrl(`/slack-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "apps/web/src/fetchers/slack-integration/get-slack-integration.ts",
       "line": 24,
       "excerpt": "\nasync function getSlackIntegration(projectId: string) {\n  const response = await fetch(\n    getApiUrl(`/slack-integration/project/${projectId}`),\n    {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 94,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "median over 47 issue(s) in the last 6 months: 6.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 4 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.vaemail/vaemail",
   "version": "1.1.0",
   "slug": "io-github-vaemail-vaemail",
   "scanned_at": "2026-10-16T02:52:03+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/vaemail/vaemail-mcp",
   "package": "npm:vaemail@1.1.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 8,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 1 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:29",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 35 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.varvararatta/finance_fintech_mcp",
   "version": "1.0.0",
   "slug": "io-github-varvararatta-finance-fintech-mcp",
   "scanned_at": "2026-10-16T02:52:05+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/varvararatta/botfactory-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "14e36b4b7628d3fdf42088f5b0fc00c151cf2ad0",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://finance-fintech-mcp.mcpize.run/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.3",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 81 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md is under `03` §7's 500-byte floor, which scores 0 regardless of content",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.varvararatta/home_automation_mcp",
   "version": "1.0.0",
   "slug": "io-github-varvararatta-home-automation-mcp",
   "scanned_at": "2026-10-16T02:52:08+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/varvararatta/botfactory-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "14e36b4b7628d3fdf42088f5b0fc00c151cf2ad0",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://home-automation-mcp.mcpize.run/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.3",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 81 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 0,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md is under `03` §7's 500-byte floor, which scores 0 regardless of content",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.vivek081166/japan-utils-mcp",
   "version": "0.1.2",
   "slug": "io-github-vivek081166-japan-utils-mcp",
   "scanned_at": "2026-10-16T02:52:10+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/vivek081166/japan-utils-mcp",
   "package": "pypi:japan-utils-mcp@0.1.2",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "9 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 166 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 166 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 33,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "pyproject.toml declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.vola-trebla/v8-cpu-profile-decoder-mcp",
   "version": "0.3.0",
   "slug": "io-github-vola-trebla-v8-cpu-profile-decoder-mcp",
   "scanned_at": "2026-10-16T02:52:13+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/vola-trebla/v8-cpu-profile-decoder-mcp",
   "package": "npm:v8-cpu-profile-decoder-mcp@0.3.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "71fd9dcd1b5976762cdb082be130008c2f249515",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 5,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 0.3.0, because the published package carries its code only as build output, which is not read as the server's own source",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 65,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 150 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (5 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by tags), last release 150 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.vsh5dvsch7-png/yueying",
   "version": "0.2.1",
   "slug": "io-github-vsh5dvsch7-png-yueying",
   "scanned_at": "2026-10-16T02:52:15+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/vsh5dvsch7-png/yueying",
   "package": "pypi:yueying@0.2.1",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 13,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 68,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-python-archive-extract-unconfined (critical/medium)",
       "detail": "An archive is extracted without validating member paths. A tar or zip entry may name `../` or an absolute path and write outside the destination; Python's extractall has historically done exactly that.",
       "path": "src/yueying/cli.py",
       "line": 192,
       "excerpt": "            times = fr.plan_times(meta[\"duration\"], scenes, target)\n            log(f\"      场景切换 {len(scenes)} 处，抽 {len(times)} 帧\")\n            frame_list = fr.extract(video, times, os.path.join(out_dir, \"frames\"), dedupe=not a.no_dedupe, log=log)\n            grids = fr.make_grids(frame_list, out_dir)\n",
       "url": "",
       "finding": "mcp-python-archive-extract-unconfined",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/yueying/report.py",
       "line": 148,
       "excerpt": "    rel = lambda p: os.path.relpath(p, out_dir).replace(\"\\\\\", \"/\")\n\n    with open(os.path.join(out_dir, \"transcript.srt\"), \"w\", encoding=\"utf-8\") as f:\n        for i, s in enumerate(segs, 1):\n            f.write(f\"{i}\\n{_srt_ts(s['start'])} --> {_srt_ts(s['end'])}\\n{s['text']}\\n\\n\")",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/yueying/report.py",
       "line": 152,
       "excerpt": "            f.write(f\"{i}\\n{_srt_ts(s['start'])} --> {_srt_ts(s['end'])}\\n{s['text']}\\n\\n\")\n    paras = paragraphs(segs)\n    with open(os.path.join(out_dir, \"transcript.txt\"), \"w\", encoding=\"utf-8\") as f:\n        for p in paras:\n            f.write(f\"[{fmt_time(p['start'])}] {p['text']}\\n\")",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/yueying/report.py",
       "line": 221,
       "excerpt": "    if notes:\n        manifest[\"notes\"] = [str(n) for n in notes]\n    with open(os.path.join(out_dir, \"manifest.json\"), \"w\", encoding=\"utf-8\") as f:\n        json.dump(manifest, f, ensure_ascii=False, indent=1)\n    return manifest",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-python-path-join-unvalidated (medium/low)",
       "detail": "A filesystem path is assembled from a value that is not a literal and opened without confinement. os.path.join discards the base entirely when the second component is absolute, and neither join nor `/` resolves `..`.",
       "path": "src/yueying/store.py",
       "line": 368,
       "excerpt": "    if sys.platform.startswith(\"linux\"):\n        try:\n            with open(f\"/proc/{pid}/stat\", encoding=\"utf-8\", errors=\"replace\") as f:\n                stat = f.read()\n            start_ticks = int(stat.rsplit(\")\", 1)[1].split()[19])      # field 22, after \"(comm)\"",
       "url": "",
       "finding": "mcp-python-path-join-unvalidated",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "6 tool registrations with conditional access logic present in the same source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 79,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 33 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 33 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 91,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.wildsurfer/cnnfag",
   "version": "2.2.0",
   "slug": "io-github-wildsurfer-cnnfag",
   "scanned_at": "2026-10-16T02:52:18+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/wildsurfer/cnn-fear-and-greed-parse",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": true,
   "repository_commit": "3f86a15e1c0122d1a87a233c48a890614c87906b",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 3,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 95,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-go-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound HTTP request is made to a URL that is not a literal. If any component is caller-supplied the server can be aimed at hosts it can reach and the caller cannot.",
       "path": "cnnfag.go",
       "line": 139,
       "excerpt": "// Get fetches the current Fear & Greed index from CNN.\nfunc Get(ctx context.Context) (Result, error) {\n\treq, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil)\n\tif err != nil {\n\t\treturn Result{}, fmt.Errorf(\"building request: %w\", err)",
       "url": "",
       "finding": "mcp-go-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "1 tool registration(s) detected — at or below `03` §4's threshold of 3, so there is no multi-tool surface to segregate",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 57,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 39 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (0 issue(s) in the last 6 months, under `03` §5's floor of 3): 1509.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 0 days (by releases), last release 66 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.xyzzylabs/wasm-mcp",
   "version": "0.2.16",
   "slug": "io-github-xyzzylabs-wasm-mcp",
   "scanned_at": "2026-10-16T02:52:21+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/xyzzylabs/wasm-mcp",
   "package": "npm:wasm-mcp@0.2.16",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "a8d4b3f1d4bb5f1098629c14b58970ae520f6ff2",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 56,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "scored on the declared repository at version 0.2.16, because the published package carries its code only as build output, which is not read as the server's own source; 1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.xyzzylabs.ai/wasm/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 4 credential-shaped string(s), every one from a keyword or entropy heuristic (Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at build/wasm-proposals-main.json:1; Hex High Entropy String at build/wasm-sections-js-api-main.json:1; Hex High Entropy String at build/wasm-sections-web-api-main.json:1; Hex High Entropy String at build/wasm-spec-core-main.json:1",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 88,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 2 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "median release gap 1 days (by releases), last release 97 day(s) ago",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 63,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.yaver-io/yaver",
   "version": "1.99.478",
   "slug": "io-github-yaver-io-yaver",
   "scanned_at": "2026-10-16T02:52:25+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/yaver-io/yaver.io",
   "package": "npm:yaver-cli@1.99.478",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": true,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 27,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 18,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/bundler.js",
       "line": 103,
       "excerpt": "  ].join(' ');\n\n  execSync(cmd, { stdio: 'inherit' });\n\n  if (!fs.existsSync(bundlePath)) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/commands/doctor.js",
       "line": 12,
       "excerpt": "function commandExists(name) {\n  try {\n    execSync(`command -v ${name}`, { stdio: ['ignore', 'pipe', 'ignore'] });\n    return true;\n  } catch (_) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/commands/doctor.js",
       "line": 12,
       "excerpt": "function commandExists(name) {\n  try {\n    execSync(`command -v ${name}`, { stdio: ['ignore', 'pipe', 'ignore'] });\n    return true;\n  } catch (_) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/postinstall.js",
       "line": 138,
       "excerpt": "    }\n    execSync(\"apt-get update -y\", { stdio: [\"ignore\", \"ignore\", \"ignore\"] });\n    execSync(`DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ${required.join(\" \")}`, {\n      stdio: \"inherit\",\n    });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/postinstall.js",
       "line": 138,
       "excerpt": "    }\n    execSync(\"apt-get update -y\", { stdio: [\"ignore\", \"ignore\", \"ignore\"] });\n    execSync(`DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ${required.join(\" \")}`, {\n      stdio: \"inherit\",\n    });",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/postinstall.js",
       "line": 167,
       "excerpt": "    }\n    execSync(\"apt-get update -y\", { stdio: [\"ignore\", \"ignore\", \"ignore\"] });\n    execSync(`DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ${missing.join(\" \")}`, {\n      stdio: \"inherit\",\n    });",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/postinstall.js",
       "line": 167,
       "excerpt": "    }\n    execSync(\"apt-get update -y\", { stdio: [\"ignore\", \"ignore\", \"ignore\"] });\n    execSync(`DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ${missing.join(\" \")}`, {\n      stdio: \"inherit\",\n    });",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/postinstall.js",
       "line": 230,
       "excerpt": "  const labels = missing.map((entry) => entry.label).join(\", \");\n  try {\n    execSync(\n      `\"${npmCmd}\" install -g --no-fund --no-audit ${packages.join(\" \")}`,\n      { stdio: \"inherit\" },",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/postinstall.js",
       "line": 230,
       "excerpt": "  const labels = missing.map((entry) => entry.label).join(\", \");\n  try {\n    execSync(\n      `\"${npmCmd}\" install -g --no-fund --no-audit ${packages.join(\" \")}`,\n      { stdio: \"inherit\" },",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/postinstall.js",
       "line": 311,
       "excerpt": "  if (!hasPW) {\n    try {\n      execSync(`\"${npmCmd}\" install -g --no-fund --no-audit playwright`, { stdio: \"inherit\" });\n      log(\"Installed Playwright test driver (web-playwright target).\");\n    } catch (error) {",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/postinstall.js",
       "line": 311,
       "excerpt": "  if (!hasPW) {\n    try {\n      execSync(`\"${npmCmd}\" install -g --no-fund --no-audit playwright`, { stdio: \"inherit\" });\n      log(\"Installed Playwright test driver (web-playwright target).\");\n    } catch (error) {",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "src/postinstall.js",
       "line": 493,
       "excerpt": "    for (const unit of [\"yaver\", \"yaver-agent\"]) {\n      try {\n        execSync(\n          `systemctl is-active ${unit} >/dev/null 2>&1 && systemctl restart ${unit}`,\n          { stdio: \"ignore\", shell: \"/bin/sh\" },",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "src/postinstall.js",
       "line": 493,
       "excerpt": "    for (const unit of [\"yaver\", \"yaver-agent\"]) {\n      try {\n        execSync(\n          `systemctl is-active ${unit} >/dev/null 2>&1 && systemctl restart ${unit}`,\n          { stdio: \"ignore\", shell: \"/bin/sh\" },",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/agent-runtime.js",
       "line": 711,
       "excerpt": "\nasync function fetchLatestRelease(repo) {\n  const response = await request(`https://api.github.com/repos/${repo}/releases?per_page=20`, {\n    headers: {\n      'User-Agent': `yaver-cli/${PACKAGE.version}`,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/agent-runtime.js",
       "line": 750,
       "excerpt": "\nasync function downloadToFile(url, destPath) {\n  const response = await request(url);\n  if (response.statusCode && response.statusCode >= 400) {\n    throw new Error(`download failed (${response.statusCode}) from ${url}. Publish the matching CLI release assets or set YAVER_AGENT_BIN.`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/agent-runtime.js",
       "line": 761,
       "excerpt": "    https.get(url, options, (response) => {\n      if (response.statusCode && response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {\n        resolve(request(response.headers.location, options));\n        return;\n      }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/commands/desktop.js",
       "line": 129,
       "excerpt": "      if (response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {\n        response.resume();\n        resolve(request(response.headers.location, options));\n        return;\n      }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/commands/desktop.js",
       "line": 147,
       "excerpt": "\nasync function download(url, destination) {\n  const response = await request(url, { headers: { Accept: \"application/octet-stream\" } });\n  if (response.statusCode !== 200) {\n    const body = await responseText(response);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/commands/desktop.js",
       "line": 170,
       "excerpt": "async function resolveDownload({ platform, arch, format, version = \"\" }) {\n  const repo = process.env.YAVER_DESKTOP_REPO || DEFAULT_REPO;\n  const response = await request(`https://api.github.com/repos/${repo}/releases?per_page=100`);\n  if (response.statusCode !== 200) throw new Error(`Desktop release lookup failed (HTTP ${response.statusCode}).`);\n  const release = parseGuiRelease(JSON.parse(await responseText(response)), version || process.env.YAVER_DESKTOP_VERSION);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/hermesc-runtime.js",
       "line": 103,
       "excerpt": "          res.resume();\n          const next = new URL(res.headers.location, u).toString();\n          fetch(next, redirectsLeft - 1);\n          return;\n        }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/hermesc-runtime.js",
       "line": 128,
       "excerpt": "      });\n    };\n    fetch(url, maxRedirects);\n  });\n}",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 67,
     "reason": "",
     "assessed_weight": "0.75",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 5 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 95.1 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 6 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "this repository's 12-month history is longer than the bounded walk `04` §7 performs, and the authors found so far span more than one of `03` §5's bands. A limit of ours, not a finding about the server.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 18,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "hermesc/README.md: over the size floor but none of `03` §7's content heuristics matched",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.yeyuan98/biomcp-ts",
   "version": "1.4.3",
   "slug": "io-github-yeyuan98-biomcp-ts",
   "scanned_at": "2026-10-16T02:52:29+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/yeyuan98/biomcp-ts",
   "package": "npm:biomcp@1.4.3",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": "a71238a40b8713c738afe1fea15c9f588bbefd23",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 284,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 44,
     "reason": "scored on the declared repository at version 1.4.3, because the published package carries its code only as build output, which is not read as the server's own source; 26 findings in test code are listed but not deducted; 4 files could not be parsed and were not scanned",
     "assessed_weight": "0.97",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "mcp-js-shell-exec-nonliteral (critical/medium)",
       "detail": "A shell is spawned on a value that is not a string literal. child_process .exec and execSync run their argument through /bin/sh, so any caller-supplied component is shell syntax, not data.",
       "path": "docs/development/biowasm-prototype/heal.mjs",
       "line": 35,
       "excerpt": "  if (!v.bad) { console.log('VALID after', round - 1, 'patches; size', buf.length); writeFileSync(HOST, buf); process.exit(0); }\n  console.log(`round ${round}: corrupt at ${v.bad} (${v.why}); fetching range ${v.bad}-${v.bad + 65535}`);\n  const range = execSync(`curl -s -r ${v.bad}-${v.bad + 65535} \"${URL}\"`);\n  console.log('  got', range.length, 'bytes');\n  buf.set(range.subarray(0, Math.min(range.length, buf.length - v.bad)), v.bad);",
       "url": "",
       "finding": "mcp-js-shell-exec-nonliteral",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-shell-exec-template-literal (critical/medium)",
       "detail": "A shell command is built from a template literal with interpolation. Quoting inside a template does not escape shell metacharacters.",
       "path": "docs/development/biowasm-prototype/heal.mjs",
       "line": 35,
       "excerpt": "  if (!v.bad) { console.log('VALID after', round - 1, 'patches; size', buf.length); writeFileSync(HOST, buf); process.exit(0); }\n  console.log(`round ${round}: corrupt at ${v.bad} (${v.why}); fetching range ${v.bad}-${v.bad + 65535}`);\n  const range = execSync(`curl -s -r ${v.bad}-${v.bad + 65535} \"${URL}\"`);\n  console.log('  got', range.length, 'bytes');\n  buf.set(range.subarray(0, Math.min(range.length, buf.length - v.bad)), v.bad);",
       "url": "",
       "finding": "mcp-js-shell-exec-template-literal",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/biowasm/pin-assets.mjs",
       "line": 78,
       "excerpt": "      const buf = await fetchWithRetries(`${CDN}/${tool}/${spec.version}/${file}`);\n      await validate(tool, file, buf, glueSize);\n      hashes[file] = createHash('sha256').update(buf).digest('hex');\n      writeFileSync(join(work, file), buf);\n      process.stdout.write(`ok (${buf.length} bytes)\\n`);",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "scripts/external-databases/depmap/ingest.ts",
       "line": 104,
       "excerpt": "      header = row;\n      for (const col of GENE_REQUIRED_COLUMNS) {\n        idx[col] = header.indexOf(col);\n        if (idx[col] === -1) throw new Error(`Gene.csv is missing required column \"${col}\"`);\n      }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/biowasm/registry.ts",
       "line": 202,
       "excerpt": "        throw fail(`${validation.reason}; set ${MIRROR_ENV_VAR} to provision from a trusted mirror`);\n      }\n      files[file] = buf;\n    }\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/biowasm/registry.ts",
       "line": 229,
       "excerpt": "  const files: Record<string, string> = {};\n  for (const file of expectedAssetFileNames()) {\n    files[file] = sha256File(join(dir, file));\n  }\n  writeFileSync(",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/entities/patent/search/index.ts",
       "line": 223,
       "excerpt": "  const total_hits_basis: PatentSearchResponse['total_hits_basis'] = {};\n  for (const source of Object.keys(total_hits) as PatentSource[]) {\n    total_hits_basis[source] = TOTAL_HITS_BASIS[source];\n  }\n",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/server/tools/drug.ts",
       "line": 67,
       "excerpt": "            if (!data || typeof data !== 'object') continue;\n            if (Array.isArray(data)) {\n              result.sections[name_] = data.slice(0, limit);\n            } else if (DRUG_ARRAY_KEYS[name_]) {\n              const keys = DRUG_ARRAY_KEYS[name_];",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/server/tools/drug.ts",
       "line": 72,
       "excerpt": "              const obj = data as Record<string, unknown>;\n              for (const k of keys) {\n                if (Array.isArray(obj[k])) obj[k] = obj[k].slice(0, limit);\n              }\n            } else {",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/server/tools/drug.ts",
       "line": 75,
       "excerpt": "              }\n            } else {\n              result.sections[name_] = sliceArraysRecursive(data, limit);\n            }\n          }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/server/tools/utils.ts",
       "line": 41,
       "excerpt": "      const obj = data as Record<string, unknown>;\n      for (const k of keys) {\n        if (Array.isArray(obj[k])) obj[k] = obj[k].slice(0, limit);\n      }\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "scripts/biowasm/pin-assets.mjs",
       "line": 28,
       "excerpt": "  for (let attempt = 1; attempt <= FETCH_ATTEMPTS; attempt++) {\n    try {\n      const res = await fetch(url, {\n        signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),\n        headers: { 'User-Agent': 'biomcp-pin-assets' },",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/biowasm/registry.ts",
       "line": 308,
       "excerpt": "export async function provisionBiowasmAssets(\n  fetchImpl: BiowasmFetch = (url) =>\n    fetch(url, {\n      headers: { 'User-Agent': 'biomcp-biowasm' },\n      signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/cli/daemon.ts",
       "line": 148,
       "excerpt": "    if (!isProcessRunning(pid)) break;\n    try {\n      const res = await fetch(healthUrl, { signal: AbortSignal.timeout(1000) });\n      if (res.ok) {\n        healthy = true;",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/connections/graphql.ts",
       "line": 76,
       "excerpt": "    const signal = signals.length === 1 ? signals[0] : AbortSignal.any(signals);\n\n    const response = await fetch(this.options.baseUrl, {\n      method: 'POST',\n      headers: this.buildHeaders(),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/connections/graphql.ts",
       "line": 121,
       "excerpt": "  async healthCheck(): Promise<boolean> {\n    try {\n      const response = await fetch(this.options.baseUrl, { method: 'POST', signal: AbortSignal.timeout(5000) });\n      return response.ok || response.status === 400;\n    } catch {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/connections/rest.ts",
       "line": 70,
       "excerpt": "    const signal = signals.length > 0 ? (signals.length === 1 ? signals[0] : AbortSignal.any(signals)) : undefined;\n\n    const response = await fetch(url, {\n      method: 'GET',\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/connections/rest.ts",
       "line": 110,
       "excerpt": "    const signal = signals.length > 0 ? (signals.length === 1 ? signals[0] : AbortSignal.any(signals)) : undefined;\n\n    const response = await fetch(url, {\n      method: 'POST',\n      headers,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/connections/rest.ts",
       "line": 145,
       "excerpt": "  async healthCheck(): Promise<boolean> {\n    try {\n      await fetch(this.options.baseUrl, { method: 'HEAD', signal: AbortSignal.timeout(5000) });\n      return true;\n    } catch {",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/entities/gene.ts",
       "line": 428,
       "excerpt": "    // json()/text() parsing cannot handle it.\n    const url = `https://www.proteinatlas.org/api/search_download.php?search=${encodeURIComponent(geneSymbol)}&format=json&columns=g,scl`;\n    const rawResponse = await fetch(url, { signal });\n    if (!rawResponse.ok) {\n      throw new Error(`HTTP ${rawResponse.status}: ${rawResponse.statusText}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/entities/geo.ts",
       "line": 405,
       "excerpt": "  const httpsUrl = url.replace(/^ftp:\\/\\//i, 'https://');\n  assertDownloadableUrl(httpsUrl);\n  const response = await fetch(httpsUrl, { signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS) });\n  if (!response.ok) {\n    throw new Error(`Failed to download ${httpsUrl}: HTTP ${response.status} ${response.statusText}`);",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/entities/patent/detail/wayback.ts",
       "line": 64,
       "excerpt": "): Promise<string | null> {\n  const { data, error } = await fetchWithTimeout(async (signal) => {\n    const resp = await fetch(idUrl, {\n      headers: { 'User-Agent': 'biomcp-patent/1.0' },\n      signal,",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/wasmcore/assets.ts",
       "line": 140,
       "excerpt": "    const timeoutMs = this.cfg.downloadTimeoutMs ?? DEFAULT_DOWNLOAD_TIMEOUT_MS;\n    try {\n      const res = await fetch(url, {\n        headers: { Accept: 'application/vnd.github+json', 'User-Agent': this.cfg.userAgent },\n        signal: AbortSignal.timeout(timeoutMs),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/wasmcore/assets.ts",
       "line": 161,
       "excerpt": "    const timeoutMs = this.cfg.assetTimeoutMs ?? DEFAULT_ASSET_TIMEOUT_MS;\n    try {\n      const res = await fetch(url, {\n        headers: { 'User-Agent': this.cfg.userAgent },\n        signal: AbortSignal.timeout(timeoutMs),",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/biowasm/engine.test.ts",
       "line": 171,
       "excerpt": "  beforeEach(() => {\n    for (const k of ENV_KEYS) {\n      SAVED_ENV[k] = process.env[k];\n      delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/biowasm/engine.test.ts",
       "line": 194,
       "excerpt": "    for (const k of ENV_KEYS) {\n      if (SAVED_ENV[k] === undefined) delete process.env[k];\n      else process.env[k] = SAVED_ENV[k]!;\n    }\n  });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/biowasm/registry.test.ts",
       "line": 87,
       "excerpt": "  beforeEach(() => {\n    for (const k of ENV_KEYS) {\n      SAVED_ENV[k] = process.env[k];\n      delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/biowasm/registry.test.ts",
       "line": 97,
       "excerpt": "    for (const k of ENV_KEYS) {\n      if (SAVED_ENV[k] === undefined) delete process.env[k];\n      else process.env[k] = SAVED_ENV[k]!;\n    }\n    rmSync(cacheRoot, { recursive: true, force: true });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/cli/doctor.test.ts",
       "line": 21,
       "excerpt": "  dir = mkdtempSync(join(tmpdir(), 'biomcp-cli-doctor-'));\n  for (const v of TRACKED_VARS) {\n    SAVED_ENV[v] = process.env[v];\n    delete process.env[v];\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/cli/doctor.test.ts",
       "line": 31,
       "excerpt": "  for (const v of TRACKED_VARS) {\n    if (SAVED_ENV[v] === undefined) delete process.env[v];\n    else process.env[v] = SAVED_ENV[v];\n  }\n  resetLoaderStateForTests();",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/config/handler.test.ts",
       "line": 33,
       "excerpt": "  dir = mkdtempSync(join(tmpdir(), 'biomcp-config-handler-'));\n  for (const v of TRACKED_VARS) {\n    SAVED_ENV[v] = process.env[v];\n    delete process.env[v];\n  }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/config/handler.test.ts",
       "line": 43,
       "excerpt": "  for (const v of TRACKED_VARS) {\n    if (SAVED_ENV[v] === undefined) delete process.env[v];\n    else process.env[v] = SAVED_ENV[v];\n  }\n  resetLoaderStateForTests();",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/connections/proxy.test.ts",
       "line": 43,
       "excerpt": "    savedEnv = {};\n    for (const key of PROXY_ENV_KEYS) {\n      savedEnv[key] = process.env[key];\n      delete process.env[key];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/connections/proxy.test.ts",
       "line": 55,
       "excerpt": "    for (const key of PROXY_ENV_KEYS) {\n      if (savedEnv[key] === undefined) delete process.env[key];\n      else process.env[key] = savedEnv[key]!;\n    }\n    consoleErrorSpy.mockRestore();",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/entities/geo.test.ts",
       "line": 209,
       "excerpt": "        for (const key of Object.keys(entries)) {\n          const base = entries[key];\n          entries[key] = () => ({ ...base(), extrelations: overrides.extrelations });\n        }\n      }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/entities/geo.test.ts",
       "line": 215,
       "excerpt": "        for (const key of Object.keys(entries)) {\n          const base = entries[key];\n          entries[key] = () => {\n            const entry = base();\n            return { ...entry, pubmedids: (entry as { pubmedids?: unknown }).pubmedids?.map(String) };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/entities/geo.test.ts",
       "line": 225,
       "excerpt": "      for (const id of ids) {\n        const factory = entries[id];\n        if (factory) result[id] = factory();\n      }\n      return { result };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/ranalysis/engine.test.ts",
       "line": 49,
       "excerpt": "  beforeEach(() => {\n    for (const k of ENV_KEYS) {\n      SAVED_ENV[k] = process.env[k];\n      delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/ranalysis/engine.test.ts",
       "line": 75,
       "excerpt": "    for (const k of ENV_KEYS) {\n      if (SAVED_ENV[k] === undefined) delete process.env[k];\n      else process.env[k] = SAVED_ENV[k]!;\n    }\n  });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/ranalysis/mirror.test.ts",
       "line": 107,
       "excerpt": "  beforeEach(() => {\n    for (const k of ENV_KEYS) {\n      SAVED_ENV[k] = process.env[k];\n      delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/ranalysis/mirror.test.ts",
       "line": 123,
       "excerpt": "    for (const k of ENV_KEYS) {\n      if (SAVED_ENV[k] === undefined) delete process.env[k];\n      else process.env[k] = SAVED_ENV[k]!;\n    }\n    rmSync(tmpRoot, { recursive: true, force: true });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/server/geo-tools.test.ts",
       "line": 109,
       "excerpt": "      const result: Record<string, unknown> = { uids: ids };\n      for (const id of ids) {\n        if (id === '200183947') result[id] = gseEsummaryEntry();\n      }\n      return { result };",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/wasmcore/assets.test.ts",
       "line": 62,
       "excerpt": "  beforeEach(() => {\n    for (const k of ENV_KEYS) {\n      SAVED_ENV[k] = process.env[k];\n      delete process.env[k];\n    }",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-prototype-pollution-merge-loop (medium/medium)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. Keys from a caller-supplied object are copied onto a target without excluding __proto__ / constructor / prototype. A tool argument carrying __proto__ then mutates Object.prototype for the whole process, which can turn an unrelated later property read into attacker-controlled data.",
       "path": "src/__tests__/wasmcore/assets.test.ts",
       "line": 77,
       "excerpt": "    for (const k of ENV_KEYS) {\n      if (SAVED_ENV[k] === undefined) delete process.env[k];\n      else process.env[k] = SAVED_ENV[k];\n    }\n    rmSync(tmpRoot, { recursive: true, force: true });",
       "url": "",
       "finding": "mcp-js-prototype-pollution-merge-loop",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/ranalysis/mirror.test.ts",
       "line": 57,
       "excerpt": "\n  function get(path: string): Promise<{ status: number; body: string }> {\n    return fetch(base + path).then(async (r) => ({ status: r.status, body: await r.text() }));\n  }\n",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/ranalysis/mirror.test.ts",
       "line": 64,
       "excerpt": "    expect(r.status).toBe(200);\n    expect(r.body).toBe('wasm-bytes');\n    const res = await fetch(base + '/bin/sub/pkg_1.0.0.tgz?x=1');\n    expect(res.status).toBe(200);\n  });",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/wasmcore/assets.test.ts",
       "line": 245,
       "excerpt": "\n  it('serves files with the configured MIME type and CORS', async () => {\n    const res = await fetch(base + '/sub/a.wasm');\n    expect(res.status).toBe(200);\n    expect(res.headers.get('content-type')).toBe('application/wasm');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/wasmcore/assets.test.ts",
       "line": 253,
       "excerpt": "\n  it('falls back to text/plain for unmapped extensions', async () => {\n    const res = await fetch(base + '/sub/notes.txt');\n    expect(res.status).toBe(200);\n    expect(res.headers.get('content-type')).toBe('text/plain');",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/wasmcore/assets.test.ts",
       "line": 261,
       "excerpt": "    writeFileSync(join(tmpRoot, 'outside.txt'), 'secret');\n    for (const path of ['/nosuch.bin', '/outside.txt', '/', '//sub/a.wasm']) {\n      const res = await fetch(base + path);\n      expect([path, res.status]).toEqual([path, 404]);\n    }",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      },
      {
       "label": "mcp-js-ssrf-nonliteral-url (medium/low)",
       "detail": "Test code — listed, not deducted: `03` §3 grades the code a user runs. An outbound request is made to a URL that is not a literal. If any part is caller-supplied the server can be aimed at internal hosts it can reach and the caller cannot.",
       "path": "src/__tests__/wasmcore/assets.test.ts",
       "line": 270,
       "excerpt": "    expect(again).toBe(base);\n    await server.close();\n    await expect(fetch(base + '/manifest.json')).rejects.toThrow();\n  });\n});",
       "url": "",
       "finding": "mcp-js-ssrf-nonliteral-url",
       "severity": "medium",
       "first_seen": null,
       "deducts": false
      }
     ]
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 39 credential-shaped string(s), every one from a keyword or entropy heuristic (Base64 High Entropy String, Hex High Entropy String). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/biowasm.js:2; Hex High Entropy String at dist/bundle.js:129; …and 29 more matches",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 97,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 1 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 0.4 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 1 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "2 regular authors in the last 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 53,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'Apache-2.0' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.github.zw008/vmware-pilot",
   "version": "1.8.7",
   "slug": "io-github-zw008-vmware-pilot",
   "scanned_at": "2026-10-16T02:52:36+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/zw008/VMware-Pilot",
   "package": "pypi:vmware-pilot@1.8.7",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 25,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 3 credential-shaped string(s), every one from a keyword or entropy heuristic (Basic Auth Credentials, Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at tests/test_executor.py:403; Secret Keyword at tests/test_models.py:108; Basic Auth Credentials at tests/test_safe_error_passthrough.py:146",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "15 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 1 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (3 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "released 1 day(s) ago (by releases), inside `03` §5's 30-day window",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "3 authors with >= 5 commits in 12 months",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 35,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4025",
       "detail": "transitive, CVSS 9.3, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4025",
       "finding": "anyio:PYSEC-2026-4025",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4145",
       "detail": "transitive, CVSS 9.1, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4145",
       "finding": "pyjwt:PYSEC-2026-4145",
       "severity": "critical",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "mcp 1.28.1 — GHSA-84m7-p3x7-pcfv",
       "detail": "direct, CVSS 7.5, fixed in 1.30.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/GHSA-84m7-p3x7-pcfv",
       "finding": "mcp:GHSA-84m7-p3x7-pcfv",
       "severity": "high",
       "first_seen": "2026-10-16",
       "deducts": true
      },
      {
       "label": "cryptography 49.0.0 — PYSEC-2026-3552",
       "detail": "transitive, CVSS 8.2, fixed in 50.0.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-3552",
       "finding": "cryptography:PYSEC-2026-3552",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4183",
       "detail": "transitive, CVSS 8.2, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4183",
       "finding": "pyjwt:PYSEC-2026-4183",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4143",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4143",
       "finding": "pyjwt:PYSEC-2026-4143",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4144",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4144",
       "finding": "pyjwt:PYSEC-2026-4144",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4149",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4149",
       "finding": "pyjwt:PYSEC-2026-4149",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4150",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4150",
       "finding": "pyjwt:PYSEC-2026-4150",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4151",
       "detail": "transitive, CVSS 7.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4151",
       "finding": "pyjwt:PYSEC-2026-4151",
       "severity": "high",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "anyio 4.13.0 — PYSEC-2026-4024",
       "detail": "transitive, CVSS 6.8, fixed in 4.14.2",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4024",
       "finding": "anyio:PYSEC-2026-4024",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4146",
       "detail": "transitive, CVSS 6.5",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4146",
       "finding": "pyjwt:PYSEC-2026-4146",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4152",
       "detail": "transitive, CVSS 5.9, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4152",
       "finding": "pyjwt:PYSEC-2026-4152",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4140",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4140",
       "finding": "pyjwt:PYSEC-2026-4140",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4141",
       "detail": "transitive, CVSS 5.3, fixed in 2.15.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4141",
       "finding": "pyjwt:PYSEC-2026-4141",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4142",
       "detail": "transitive, CVSS 5.3, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4142",
       "finding": "pyjwt:PYSEC-2026-4142",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4147",
       "detail": "transitive, CVSS 4.8, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4147",
       "finding": "pyjwt:PYSEC-2026-4147",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "pyjwt 2.13.0 — PYSEC-2026-4148",
       "detail": "transitive, CVSS 4.4, fixed in 2.14.0",
       "path": "uv.lock",
       "line": 0,
       "excerpt": "",
       "url": "https://osv.dev/vulnerability/PYSEC-2026-4148",
       "finding": "pyjwt:PYSEC-2026-4148",
       "severity": "medium",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "transparency": {
     "axis": "transparency",
     "score": 78,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "pyproject.toml declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "RELEASE_NOTES.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "SECURITY.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.prisma/mcp",
   "version": "1.0.0",
   "slug": "io-prisma-mcp",
   "scanned_at": "2026-10-16T02:52:40+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/prisma/mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "90849c558c54314bbbe9a13a40c919ff448ee5f1",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 1,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.prisma.io/sse, https://mcp.prisma.io/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 13,
     "reason": "",
     "assessed_weight": "0.9",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 374 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 30.3 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release in 374 days (by tags) — over a year",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no author reached `03` §5's 5-commit bar in the last 12 months (0 contributor(s) with fewer) — scored at §5's weakest described band, which the section defines for a quiet sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "dxt/LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.sunaivacore/gate",
   "version": "2.0.4",
   "slug": "io-sunaivacore-gate",
   "scanned_at": "2026-10-16T02:52:43+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "npm:@sunaiva/gate@2.0.4",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the published package carries its code only as build output (150 files under dist/ or build/), which this scanner does not read as the server's own source — a bundle can inline its dependencies' code",
     "assessed_weight": "0",
     "fault": "project",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.sunaivacore.io; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "source was fetched but every file in it was oversized, unreadable or excluded, so no source text could be read, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; text not matched against any license this build can identify (`04` §7's classifier is not wired; see module docstring)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.tooloracle/predictoracle",
   "version": "1.0.0",
   "slug": "io-tooloracle-predictoracle",
   "scanned_at": "2026-10-16T02:52:44+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/ToolOracle/predictoracle",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://tooloracle.io/predict/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/ToolOracle/predictoracle) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "io.usefulapi/youcanbookme",
   "version": "1.11.1",
   "slug": "io-usefulapi-youcanbookme",
   "scanned_at": "2026-10-16T02:52:45+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/m190/usefulapi-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "a0fe35c54a48fb046b2b6eb9f868481ea13c51e5",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://youcanbookme.usefulapi.io/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 82,
     "reason": "",
     "assessed_weight": "0.7",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 3 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "lifetime median (1 issue(s) in the last 6 months, under `03` §5's floor of 3): 6.9 day(s) to first maintainer comment",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 23,
     "reason": "",
     "assessed_weight": "0.8",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "no LICENSE file and no license field in any package manifest — `03` §7: without a license, a consumer has no grant to use the server at all",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "specific scope or access documentation is present, but `03` §7's 100 and 60 bands both compare it against scopes INFERRED from static analysis, which is not built yet. Scoring 100 on an empty inference would be a vacuous truth — 'all ∅ inferred scopes are documented'.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "net.kokofinance/koko-finance",
   "version": "1.1.0",
   "slug": "net-kokofinance-koko-finance",
   "scanned_at": "2026-10-16T02:52:48+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/KokoFinance/koko-mcp-server",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "8e8ee607a55c953c5025230c5ae9d307fed08deb",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://kokofinance.net/mcp/; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 9 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 43,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "org.heathy/nutrition",
   "version": "0.6.0",
   "slug": "org-heathy-nutrition",
   "scanned_at": "2026-10-16T02:52:51+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Chandata/heathy-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "61cad08ab6609d99e484b49c6c794e23d6f01d01",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.heathy.org/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 6 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "pro.nomos/nomos-mcp",
   "version": "1.0.0",
   "slug": "pro-nomos-nomos-mcp",
   "scanned_at": "2026-10-16T02:52:53+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Nomos-Tech/nomos-mcp",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.65",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "registry declares required credential header(s): X-API-Key; scored 80, not 100: `03` §4's top band also requires that the server REFUSE an uncredentialed request, which cannot be established without connecting (`04` §9). The requirement is declared; its enforcement is unverified.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://mcp.nomos.pro/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/Nomos-Tech/nomos-mcp) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "services.gera/mcp-gera-data",
   "version": "1.0.0",
   "slug": "services-gera-mcp-gera-data",
   "scanned_at": "2026-10-16T02:52:53+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/geraservicesuk/globetura",
   "package": "npm:@gera-services/mcp-gera-data@1.0.0",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "stdio",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 2,
   "files_pruned": 1,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "1 vendored or minified path was excluded before scanning; machine-generated bundles are not the server's own code",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 100,
     "reason": "",
     "assessed_weight": "0.85",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "stdio transport: the client launches the server as a subprocess, so the OS process boundary is the auth boundary — `03` §4 does not penalise absent auth here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared transport: stdio — launched as a subprocess by the client, so the security boundary is the client process, not a network port (`03` §4)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 26,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "package.json declares 'MIT' but no LICENSE file ships with the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "uk.co.coldroominstallationcost/site",
   "version": "1.0.1",
   "slug": "uk-co-coldroominstallationcost-site",
   "scanned_at": "2026-10-16T02:52:57+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "",
   "source_state": "not_declared",
   "source_subject": "",
   "source_reason": "this server declares no source we know how to fetch",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://coldroominstallationcost.co.uk/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "uk.co.employmentcontractgenerator/site",
   "version": "1.0.1",
   "slug": "uk-co-employmentcontractgenerator-site",
   "scanned_at": "2026-10-16T02:52:57+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "",
   "source_state": "not_declared",
   "source_subject": "",
   "source_reason": "this server declares no source we know how to fetch",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://employmentcontractgenerator.co.uk/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "uk.co.shipmycar/quote",
   "version": "2.0.0",
   "slug": "uk-co-shipmycar-quote",
   "scanned_at": "2026-10-16T02:52:57+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/itboffins/SMC-Website-NextJS",
   "package": "",
   "source_state": "unreachable",
   "source_subject": "repository",
   "source_reason": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://www.shipmycar.co.uk/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server's declared repository could not be read through the GitHub API, so `03` §5's maintenance signals were not retrieved — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "the repository this server declares (https://github.com/itboffins/SMC-Website-NextJS) is not publicly reachable, so its documentation could not be read — note that a private repository and an absent one are indistinguishable from outside",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "uk.co.siteinvestigationcost/site",
   "version": "1.0.1",
   "slug": "uk-co-siteinvestigationcost-site",
   "scanned_at": "2026-10-16T02:52:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "",
   "package": "",
   "source_state": "not_declared",
   "source_subject": "",
   "source_reason": "this server declares no source we know how to fetch",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": null,
   "repository_commit": null,
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 80,
     "reason": "",
     "assessed_weight": "0.25",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no source was fetched, and no credential header is declared. An undeclared header is not an absent one — measured 2026-09-15, only 10 of 100 remotes declare one at all — so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://siteinvestigationcost.co.uk/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no source was fetched, so there is nothing to scan for committed credentials",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no source was fetched, so neither the tool count nor any access-control logic can be read",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": null,
     "reason": "this server declares no repository, so `03` §5's forge signals have nothing to read",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "no last-commit date was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "no issue-response median was retrieved. An unanswered issue scores 0 under `03` §5, but an absent measurement is not an unanswered issue.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "no release history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "no contributor history was retrieved for this repository",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": null,
     "reason": "this server declares no source we know how to fetch",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "publisher"
     ],
     "evidence": [
      {
       "label": "license",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "this server declares no source we know how to fetch",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "vet.bio/biovet-mcp",
   "version": "1.1.0",
   "slug": "vet-bio-biovet-mcp",
   "scanned_at": "2026-10-16T02:52:58+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "",
   "repository_url": "https://github.com/Bio-Vet/biovet-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "streamable-http",
   "transport_mismatch": false,
   "ref_matched_version": true,
   "repository_commit": "7f829473cb67cb96dc4ff5bb9f6cd4cc765b48f3",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 0,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": null,
     "reason": "no source files in a language the ruleset covers (python, javascript, typescript, go)",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": 89,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "no authentication appears in the source we fetched, but this server's network endpoint is a hosted remote, whose authentication can be enforced in front of its code — and no credential header is declared. An undeclared header is not an absent one, so `03` §4's \"no authentication\" band is not established.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "declared endpoint(s) are HTTPS: https://bio.vet/mcp; scored 80, not 100: `03` §4 reserves 100 for HTTPS *with HSTS*, and an HSTS header can only be seen by connecting, which `04` §9 does not do. This is an unverifiable band, not an observed absence.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "no committed credential found, and no environment variable with a credential-shaped name is read anywhere in the source",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "no tool registration was recognised anywhere in the source. An MCP server registers tools by definition, so this is a gap in our detection rather than a server with none, and `03` §4's threshold cannot be applied to it.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 83,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 26 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "this repository has no issues `03` §5's window covers. An unanswered issue scores 0 under §5, but a repository with no issues filed has not failed to answer one.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "a release exists but fewer than two fall inside `03` §5's 12-month window, so no median gap can be taken — and §5's remaining bands are all defined on that median. A limit of the methodology, not of this repository.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 36,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "no CHANGELOG in the fetched source. `03` §7's partial credit for tagged releases carrying release notes is not applied here — that needs the forge API, which this check does not call",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  },
  {
   "name": "xyz.draket/btcpay-mcp",
   "version": "0.3.0",
   "slug": "xyz-draket-btcpay-mcp",
   "scanned_at": "2026-10-16T02:52:59+00:00",
   "methodology_version": "0.2.0",
   "scanner_version": "0.38.3",
   "ruleset_version": "0.1.1",
   "repository_url": "https://github.com/ThomsenDrake/btcpay-mcp",
   "package": "",
   "source_state": "fetched",
   "source_subject": "",
   "source_reason": "",
   "transport": "unknown",
   "transport_mismatch": false,
   "ref_matched_version": false,
   "repository_commit": "a87de3ba954953375db1119e688c2d81eb6eef63",
   "registry_state": "listed",
   "registry_note": "",
   "files_scanned": 4,
   "files_pruned": 0,
   "axes": {
    "code_safety": {
     "axis": "code_safety",
     "score": 100,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "auth_posture": {
     "axis": "auth_posture",
     "score": null,
     "reason": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "authentication_model",
       "detail": "the registry entry declares no transport, so `03` §4's stdio carve-out cannot be applied either way",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "transport_security",
       "detail": "the registry entry declares no transport for any package or remote",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "secret_handling",
       "detail": "detect-secrets matched 2 credential-shaped string(s), every one from a keyword or entropy heuristic (Secret Keyword). Those flag placeholders, variable names and content hashes as readily as credentials, so they do not establish the committed credential `03` §4's 0 asserts, and this sub-check is not scored; Secret Keyword at README.md:31; Secret Keyword at tests/test_server.py:428",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "authorization_granularity",
       "detail": "21 tool registrations and no conditional access logic found — `03` §4 calls this case 'needs human review' and assigns it no score band, so it is not scored here",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "maintenance": {
     "axis": "maintenance",
     "score": 30,
     "reason": "",
     "assessed_weight": "0.45",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [
      "project",
      "publisher"
     ],
     "evidence": [
      {
       "label": "recency",
       "detail": "last commit 203 day(s) before 2026-10-16",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "issue_responsiveness",
       "detail": "every issue read was filed by the project itself (1 by its maintainers or bots), so none is someone outside waiting for an answer, and `03` §5's question — will anyone read an issue I file? — has nothing to measure.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "release_cadence",
       "detail": "this repository publishes neither releases nor version tags",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "bus_factor",
       "detail": "sole maintainer, and no commit in over 90 days",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "repository_signals",
       "detail": "`03` §5 scores this by quartile WITHIN the server's category, which needs a distribution across every scanned server and so cannot be computed while scanning one. It is a post-pass over the crawl and that pass does not exist yet.",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    },
    "dependency_health": {
     "axis": "dependency_health",
     "score": null,
     "reason": "no lockfile in the fetched source; dependency versions are unresolved, so no vulnerability can be attributed",
     "assessed_weight": "0",
     "fault": "publisher",
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": []
    },
    "transparency": {
     "axis": "transparency",
     "score": 58,
     "reason": "",
     "assessed_weight": "1",
     "fault": null,
     "evidence_omitted": 0,
     "unmeasured_faults": [],
     "evidence": [
      {
       "label": "license",
       "detail": "LICENSE present with no SPDX-License-Identifier tag; identified as 'MIT' from its text",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "readme_quality",
       "detail": "README.md: installation instructions (+25), configuration documented (+25), exposed tools or resources enumerated (+30), states what the server does in the first 200 words (+20)",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "declared_scopes",
       "detail": "neither the README nor the MCP manifest documents what the server accesses or what side effects it has",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "changelog",
       "detail": "CHANGELOG.md present",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      },
      {
       "label": "security_contact",
       "detail": "no SECURITY.md and no disclosure contact in the README, so a finder has no route to report a vulnerability privately",
       "path": "",
       "line": 0,
       "excerpt": "",
       "url": "",
       "finding": "",
       "severity": "",
       "first_seen": null,
       "deducts": true
      }
     ]
    }
   },
   "findings_tracked_since": "2026-10-10"
  }
 ]
}